Как исправить ошибку обработки IPA в xcode 11?

Когда я пытался создать файл IPA с помощью опции «Распространить приложение». Это выдало ошибку «Ошибка обработки IPA».

Я проверил файл журналов: IDEDistribution.standard.log файл.

2019-08-06 18:36:52 Предупреждение +0000: проблема с конфигурацией: платформа iPhoneSimulator.platform не имеет SDK, отличных от симулятора; игнорируя его Сканирование IPA ... 2019-08-06 18:36:52 +0000 Ошибка утверждения: ожидается 4 арки в выводе otool: /var/folders/4t/rpjk7pd55t16jfrd32y98gf0lb2t68/T/IDEDistributionOptionThinning.~~~a4cZJc/Payload/demo .app / Frameworks / AppAuth.framework / AppAuth: заголовок Mach magic cplicpe cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 X86_64 ALL 0x00 DYLIB 23
3680 NOUNDEFS DYLDLINK ДВУХУРОВНЕВЫЙ NO_REEXPORTED_DYLIBS Команда загрузки 0


person R.B Niranjan    schedule 06.08.2019    source источник
comment
Я могу исправить эту проблему после обновления AppAuth.framework.   -  person R.B Niranjan    schedule 06.08.2019
comment
не могли бы вы предоставить больше информации о том, как вы это сделали?   -  person Catluc    schedule 08.08.2019
comment
Эта проблема возникла из-за несовместимости APPAuth.framework с xcode11. Я обновил фреймворк, и он не работает нормально.   -  person R.B Niranjan    schedule 08.08.2019
comment
У меня аналогичная ошибка с Alamofire5 beta 7 и более ранними версиями бета-версии, попробовал ваш способ, но не сработал. Спасибо, в любом случае!!   -  person Catluc    schedule 08.08.2019
comment
Не могли бы вы поделиться файлом журнала сбоев IPA, или вы можете проверить, где он не работает, когда вы пытаетесь создать IPA.   -  person R.B Niranjan    schedule 08.08.2019
comment
Ошибка утверждения: ожидалось 4 арки в выходных данных otool: /var/folders/q9/mj2m25mn5b3cm43pgq1zch480000gn/T/IDEDistributionOptionThinning.~~~HN3opE/Payload/demoApp.app/PlugIns/notificationManager.appex/Alamofire.Manager.appx/ramework cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 X86_64 ALL 0x00 DYLIB 32 4920 NOUNDEFS DYLDLINK ДВУХУРОВНЕВЫЕ WEAK_DEFINES BINDS_TO_WEAK NO_REEXPORTED_DYLIBS APP_EXTENSION_SAFE   -  person Catluc    schedule 08.08.2019
comment
Я просто исправил это, потому что зависимая цель использовала ссылку на плохой / поврежденный фреймворк Alamofire. Я исправил это, удалив все зависимости Alamofire от этой цели на этапах сборки, а также удалив фреймворк из проекта. И затем я снова добавил Framework, это устранило мою проблему   -  person Catluc    schedule 09.08.2019
comment
Как упоминал @Tonny Xu. Решение находится здесь.   -  person Denny    schedule 03.10.2019
comment
Решение, предоставленное в следующем сообщении, сработало для меня stackoverflow.com/questions/42641806/   -  person For Guru    schedule 07.02.2020
comment
Убедитесь, что ваши двоичные фреймворки и пути фреймворков подов не включены в Build Phases -> Copy Bundle Resource   -  person Kuvonchbek Yakubov    schedule 27.05.2020
comment
Та же проблема с Xcode 12 на Mac с чипом M1. Но я не уверен, что это тоже важно для вас: переход с цели развертывания iOS 10.0 на 13.0 решил проблему для меня. (Также обновление формата проекта до Xcode 12.0-совместимого, но я понятия не имею, необходимо ли это или связано). Я нашел ответ здесь: stackoverflow.com/a/64932592/470964   -  person Sebastian    schedule 04.12.2020


Ответы (15)


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

введите описание изображения здесь

Этапы сборки -> кнопка с плюсом -> для создания новой фазы сценария выполнения

 APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")

FRAMEWORK_TMP_PATH="$FRAMEWORK_EXECUTABLE_PATH-tmp"

case "${TARGET_BUILD_DIR}" in
*"iphonesimulator")
    echo "No need to remove archs"
    ;;
*)
    if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "i386") ; then
    lipo -output "$FRAMEWORK_TMP_PATH" -remove "i386" "$FRAMEWORK_EXECUTABLE_PATH"
    echo "i386 architecture removed"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
    fi
    if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "x86_64") ; then
    lipo -output "$FRAMEWORK_TMP_PATH" -remove "x86_64" "$FRAMEWORK_EXECUTABLE_PATH"
    echo "x86_64 architecture removed"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
    fi
    ;;
esac

echo "Completed for executable $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")

done
person Dilip Mishra    schedule 02.03.2020
comment
Я сделал то же, что и объяснил. Сборка успешно создана. Но когда я установил его на свое настоящее устройство, приложение было установлено, но значок приложения отключен. Я не получил ни одной ошибки. И не могу открыть приложение - person Aman Gupta; 08.06.2020
comment
Самое важное, о чем нужно помнить, - это добавить этот сценарий Run в самый конец BuildPhases. В частности, после «Embed Frameworks», чтобы убедиться, что нежелательные архитектуры удалены из всех платформ. - person atulkhatri; 28.07.2020

1. снимите флажок «Восстановить из битового кода», 2. быстро нажмите кнопку «Далее быстро». (скорость тоже важна.)

введите описание изображения здесь

в противном случае будет показано, что обработка IPA завершилась неудачно. введите описание изображения здесь

person Zgpeace    schedule 06.03.2020
comment
Спасибо, чувак, у меня в приложении есть встроенные фреймворки, они не работают с биткодом. - person Booharin; 18.03.2020
comment
Я сделал то же, что и объяснил. Сборка успешно создана. Но когда я установил его на свое настоящее устройство, приложение было установлено, но значок приложения отключен. Я не получил ни одной ошибки. И не удалось открыть приложение. - person Aman Gupta; 08.06.2020
comment
Привет @AmanGupta, я думаю, вы можете отлаживать свое приложение на реальном устройстве, во-первых, с помощью сертификата разработки. - person Zgpeace; 09.06.2020
comment
@Zgpeace, не могли бы вы сообщить мне, как его изменить и запустить на реальном устройстве? - person Aman Gupta; 09.06.2020
comment
@AmanGupta Не могли бы вы сообщить мне, можете ли вы отлаживать свое приложение на реальном устройстве с помощью сертификата разработки? Я предлагаю вам отладить свое приложение, чтобы найти больше журналов на реальном устройстве. - person Zgpeace; 09.06.2020
comment
@Zgpeace Я отлаживаю приложение в режиме отладки, и оно работает нормально, но когда я переключил его в режим выпуска. Я получаю сообщение об ошибке Unable to open <AppName>. Любая помощь, как избавиться от этого? - person Aman Gupta; 09.06.2020
comment
@AmanGupta, не могли бы вы попробовать заархивировать приложение в режиме отладки? Щелкните Изменить схему ›Архив› Конфигурация сборки изменить на Отладку ›закрыть. - person Zgpeace; 09.06.2020
comment
@Zgpeace Я использую push-уведомление One Signal. Я установил свой единственный идентификатор сигнала таким же, как мой идентификатор пакета, и тогда push будет работать, и приложение также будет работать в режиме отладки. когда я пытаюсь создать сборку релиза. Сборка успешно создана, но не открывается на реальном устройстве. Также, когда я меняю свой идентификатор одного пакета сигналов, один сигнал выдает ошибку Bundle Mismatch error - person Aman Gupta; 09.06.2020
comment
Позвольте нам продолжить это обсуждение в чате. - person Zgpeace; 09.06.2020
comment
Да, это действительно работает - однажды мне удалось это сделать. Но мой iMac настолько быстр, что я не могу щелкать достаточно быстро. Есть ли другой способ снять этот флажок? - «Редактировать схему» - только для пользователей, которые не редактируют схемы ежедневно: где это снова было спрятано? - person Martin; 03.03.2021
comment
Вау - это действительно сработало. - person Syed Ali Salman; 19.05.2021
comment
Невозможно снять отметку. Перед тем, как снять галочку, появляется экран сбоя обработки ipa. - person Mihir Oza; 10.06.2021
comment
Это один из самых забавных ответов, которые я когда-либо видел, ага, потому что он действительно сработал - person Jalil; 28.06.2021

Вы должны проверить Embed Frameworks под Xcode > build фазами.

Если ваша структура представлена ​​здесь, вы не можете использовать i386\x86_64 в своей структуре. Потому что Embed Frameworks скопированы в приложение. Для управления размером приложения требуется, чтобы фреймворки в Embed Frameworks были наиболее оптимизированными.

Вы можете использовать Link Binary With Libraries, чтобы представить свою структуру, как описано здесь: https://github.com/Carthage/Carthage/issues/1046

Обратите внимание, что вам нужно добавить новый сценарий запуска и добавить в него свою структуру, иначе произойдет сбой. < img src = "https://i.stack.imgur.com/qNTAs.png" alt = "введите описание изображения здесь">

person nullLululi    schedule 10.10.2019

Для решения подобной проблемы со своей стороны я использовал следующее:

  • В цели приложения я перешел на Build Phases
  • После разделов Embed Frameworks и Embed App Extensions я добавил Run script следующим скриптом:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.

find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
    FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
    FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
    echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

    EXTRACTED_ARCHS=()
    for ARCH in $ARCHS
    do
        echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
        lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
        EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
    done

    echo "Merging extracted architectures: ${ARCHS}"
    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
    rm "${EXTRACTED_ARCHS[@]}"

    echo "Replacing original executable with thinned version"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done

Скрипт, который я взял отсюда: https://medium.com/@maximbilan/ios-submission-unsupported-architectures-issues-733917a98cc3, спасибо Дэниелу Кеннету!

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

Со своей стороны, я также заметил, что мне нужно отключить этот скрипт при локальной компиляции приложения (на устройствах разработки / симуляторе).

Надеюсь, это поможет!

person wkukielczak    schedule 26.02.2020
comment
Я как раз собирался написать такой же ответ :) - person Morten Holmgaard; 27.02.2020
comment
Это плюс удаление всех статических библиотек из шага copy-carthage помогло. Спасибо! - person Maciej Stramski; 23.07.2020

Кажется, что динамическая библиотека с архитектурой i386 или x86_64 не допускается при архивировании в Xcode 11. И я исправил это, удалив эти архитектуры из упомянутых фреймворков.

person chenfeng    schedule 27.09.2019
comment
На самом деле я исправил проблему, добавив скрипт для удаления двоичного файла симулятора - person Tonny Xu; 02.10.2019
comment
@TonnyXu У меня такая же проблема, можете ли вы предоставить мне сценарий - person JhonnyTawk; 04.11.2019
comment
Скрипт из @Varrry в этой статье помог удалить архитектуры и решил проблему для меня. - person Lean van Heerden; 05.11.2019

Пришлось снять галочку "Восстановить из битового кода"

person MobileMon    schedule 20.11.2019
comment
У меня это сразу сработало - спасибо! Я понятия не имею, каковы основные причины (и это вполне может быть связано с другими архитектурами), но, похоже, стоит попробовать. - person Benjohn; 21.11.2019
comment
Это мне помогло. Благодарность - person Habib Ali; 29.11.2020
comment
Есть ли способ сделать это без щелчка? Мой компьютер сильно не работает. - person Martin; 24.02.2021
comment
Да, это работает. Но на быстрой машине ошибка возникает быстрее, чем вы можете установить флажок. Вам нужно попробовать десятки раз. Должен быть способ получше. - person Martin; 03.03.2021

Мы решили эту проблему, установив Always Embed Swift Standard Libraries на NO во всех фреймворках, которые используются в нашем приложении.

person David Němec    schedule 09.10.2019
comment
Спасибо. Установка по умолчанию «НЕТ» заставила его работать и успешно экспортировал файл ipa. Я предполагаю, что быстрые библиотеки, встроенные в структуру, могут привести к тому, что приложение не сможет включить битовый код для всего приложения. - person DragonCherry; 15.01.2020

Мне пришлось выбрать «Не вставлять» в Frameworks, чтобы решить эту проблему.

person Josef Vancura    schedule 10.12.2019

Для тех, кто пробует с M1 Chip (Silicon)

Полностью выйти из Xcode (закрыть и выйти из строки меню)

Перейти к поиску - ›Приложения

Щелкните правой кнопкой мыши Xcode и выберите Получить информацию.

Проверить Розетту

введите описание изображения здесь

Попробуйте снова открыть Xcode

person Chamin Thilakarathne    schedule 10.05.2021

В моем случае прореживание приложений давало сбой, и причина заключалась в том, что моя внутренняя структура зависела от Alamofire, а ее двоичный файл встраивался и подписывался. Изменение параметра Встроить с Встроить и подписать - ›Не встраивать немедленно решило мою проблему.

На мой взгляд, вся логика этой проблемы заключается в том, чтобы размер пакета приложений был меньше, чем может Apple, но встраивание ваших фреймворков увеличивает этот размер. Думаю, это все, на что жалуется App Thinning. Итак, общее решение этой проблемы: проверьте все внешние фреймворки, которые могут увеличить ваш пакет приложений. Особенно, если вы используете Карфаген.

person miletliyusuf    schedule 06.07.2020

В моем случае проблема была вызвана включением Bitcode. Перейти к

Build Settings - ›Enable Bitcode и установите значение NO.

Попробуйте архивировать снова, и все должно работать.

person Bijoy Thangaraj    schedule 04.03.2021

Я обнаружил проблему с SDWebImageMapKit фреймворком, доступным с SDWebImage. Я просто удалил его и добился успеха.

person MD.    schedule 04.12.2019

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

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

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

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

person Xaxxus    schedule 05.11.2020

Я какое-то время не обновлял свои cocoapods, исправил это, обновив и переустановив стручки.

sudo gem install cocoapods
pod update
pod deintegrate
pod install
person Kyle Liu    schedule 23.04.2021

  1. Открыть Терминал

  2. Откройте свой проект, перетащите путь соответствующей платформы, например, в Терминал.

    cd /Users/xxxxx/Desktop/MyProject/ABC.framework

  3. Задайте имя своей платформы в команде ниже и запустите

    липо -удаление i386 ABC -o ABC && липо -удаление x86_64 ABC -o ABC

person Gopal Gupta    schedule 02.04.2020
comment
Добро пожаловать в StackOverflow. При ответе на вопрос, пожалуйста, также предоставьте объяснение, объясняющее, почему проблема существует и как ваше решение ее решает, чтобы люди могли действительно понять, а не просто решить проблему. - person Alan; 02.04.2020