我有一个支持 iOS 11/12 的 iOSapp。我一直在使用Xcode 10时向App Store Connect for TestFlight提交构建版本,没有问题。今天我使用 Xcode 10 提交了一个构建版本,并收到了以下电子邮件:
尊敬的开发人员,我们在最近的交付中发现了一个或多个问题 为您的应用程序,"开发AP"。请更正以下问题,然后 再次上传。无效的二进制体系结构 - iOS 3.0 引入了支持 适用于多个二进制体系结构。如果您的二进制文件是为 多个体系结构,您的 Info.plist 必须具有 MinimumOSVersion 值至少为 3.0 的键。此外,如果你的应用是 旨在支持早期的 iPhone 和 iPod touch 型号,您的应用程序 必须至少包含一个 ARMv6 二进制文件;仅限"瘦"armv7 的二进制文件将 除非 ARMv7 所需的设备功能也相同,否则不接受 存在于 Info.plist UIRequiredDeviceCapabilities 键或 最低 OSVersion 密钥的值为 4.3 或更高。具体来说,我们 在二进制文件中发现以下不受支持的体系结构:
x86_64。 部署目标 - 10.0 迅捷语言版本 - 3.3 Pod 部署目标版本 - 10.0
我试图在info.plist中使用armv6。并尝试在 Xcode 9.4.1 中构建。并尝试使用启动脚本,但此问题在此项目中仍然存在。
如果有人有任何想法,将不胜感激。
将此运行脚本添加到项目中
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
他们发现架构"x86_64"。这是一个64位英特尔处理器。你能给我看任何配备英特尔处理器的iPhone吗?它们不存在。因此,找出 64 位英特尔代码潜入您的项目的位置并将其删除。
试图添加armv6是严重误导的。 armv6是您可以在iPhone 3GS上找到的东西。您的应用程序应该支持 aarch64 或 arm64(这是必需的(,如果您有兴趣支持 32 位设备,则支持 armv7,那就是 iPhone 5/5c 或更早版本。