Xcode 10 Недопустимая двоичная архитектура?

У меня есть приложение для iOS, поддерживающее iOS 11/12. Я без проблем отправлял сборки в App Store Connect для TestFlight, используя Xcode 10. Сегодня я отправил сборку с помощью Xcode 10 и получил следующее электронное письмо:

Уважаемый разработчик! Мы обнаружили одну или несколько проблем с недавней доставкой вашего приложения "DevelopAP". Устраните следующие проблемы, а затем загрузите снова. Недопустимая двоичная архитектура. В iOS 3.0 появилась поддержка нескольких двоичных архитектур. Если ваш двоичный файл создан для нескольких архитектур, ваш Info.plist должен иметь ключ MinimumOSVersion со значением не менее 3.0. Кроме того, если ваше приложение предназначено для поддержки более ранних моделей iPhone и iPod touch, ваше приложение должно содержать как минимум двоичный файл armv6; «Тонкие» двоичные файлы только для armv7 не будут приниматься, если требуемая возможность устройства armv7 также не присутствует в ключе Info.plist UIRequiredDeviceCapabilities или ключ MinimumOSVersion имеет значение 4,3 или выше. В частности, мы обнаружили в вашем двоичном файле следующие неподдерживаемые архитектуры:

х86_64. Целевая среда развертывания — 10.0 Языковая версия Swift — 3.3 Целевая версия развертывания модулей — 10.0

Я пытался использовать armv6 в info.plist. И попробуйте собрать в Xcode 9.4.1. И попробуйте использовать стартовые скрипты, но эта проблема все еще существует в этом проекте.

Если у кого есть мысли, буду очень признателен.


person Andrei Trotsko    schedule 11.10.2018    source источник


Ответы (2)


Добавьте этот скрипт запуска в свой проект

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    
person Andrei Trotsko    schedule 14.10.2018

Нашли архитектуру "x86_64". Это 64-битный процессор Intel. Можете ли вы показать мне любой iPhone с процессором Intel? Их не существует. Так что выясните, откуда в вашем проекте прокрался 64-битный код Intel, и удалите его.

Попытка добавить armv6 серьезно ошибочна. armv6 — это то, что вы найдете на iPhone 3GS. Ваше приложение должно поддерживать aarch64 или arm64 (это обязательно) и armv7, если вы заинтересованы в поддержке 32-битных устройств, то есть iPhone 5/5c или старше.

person gnasher729    schedule 14.10.2018