Неподдерживаемые архитектуры при загрузке в App Store

Я внедрил в свой проект новую библиотеку (с именем Eureka), и теперь при попытке загрузки возникают ошибки в App Store/TestFlight.

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

К ним относятся «Неподдерживаемые архитектуры», «Неверное выравнивание сегментов» и «Двоичный файл недействителен». Похоже, что этот двоичный файл не был создан с помощью компоновщика Apple.

У меня не было ни одной из этих ошибок до внедрения Eureka. Я использую Xcode 7.3

Должен отметить, что я установил фреймворк через Carthage.


person vikzilla    schedule 05.04.2016    source источник
comment
@BraneDullet Эта ссылка уже указана в моем ответе ниже.   -  person vikzilla    schedule 10.02.2017


Ответы (3)


Проблема заключалась в том, что Xcode предварительно компилирует динамическую библиотеку как для симулятора (i386), так и для устройств (x86_64). Вы можете реализовать этот сценарий запуска для удаления неиспользуемой архитектуры.

person vikzilla    schedule 05.04.2016

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

Имя проекта -> Фазы сборки -> создайте новый сценарий запуска, используя приведенный ниже код. Вот и все. Удачного кодирования!!!

echo "Target architectures: $ARCHS"

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"

# remove simulator's archs if location is not simulator's directory
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 MRizwan33    schedule 18.08.2020

Проверить совпадения символов и фрагментов с помощью dwarfdump

dwarfdump --uuid path_to_dSYM_or_binary

Это даст вам список UUID и фрагментов. Вы также обнаружите, что UUID будет отображаться в отчетах о сбоях от Apple.

липо для удаления нежелательных архитектур

lipo -remove <architecture> -output <binary_name> <binary_name>
person Cameron Lowell Palmer    schedule 15.01.2019