【问题标题】:Xcode 10 Invalid binary architecture?Xcode 10 无效的二进制架构?
【发布时间】:2026-01-29 05:55:01
【问题描述】:
我有一个支持 iOS 11/12 的 iOS 应用。我一直在使用 Xcode 10 将构建提交到 App Store Connect for TestFlight,没有出现问题。今天我使用 Xcode 10 提交了构建,并收到以下电子邮件:
尊敬的开发者,我们在最近的交付中发现了一个或多个问题
为您的应用程序“DevelopAP”。请更正以下问题,然后
再次上传。无效的二进制架构 - iOS 3.0 引入了支持
对于多个二进制架构。如果您的二进制文件是为
多种架构,你的 Info.plist 必须有一个 MinimumOSVersion
值至少为 3.0 的键。此外,如果您的应用是
旨在支持早期的 iPhone 和 iPod touch 型号,您的应用
必须至少包含一个 armv6 二进制文件; “瘦” armv7-only 二进制文件将
除非 armv7 所需的设备功能也被接受,否则不被接受
存在于 Info.plist UIRequiredDeviceCapabilities 键或
MinimumOSVersion 键的值为 4.3 或更高。具体来说,我们
在您的二进制文件中发现以下不受支持的架构:
x86_64。
部署目标 - 10.0
Swift 语言版本 - 3.3
Pods 部署目标版本 - 10.0
我尝试在 info.plist 中使用 armv6。并尝试在 Xcode 9.4.1 中构建。并尝试使用启动脚本,但这个问题仍然存在于这个项目中。
如果有人有任何想法,将不胜感激。
【问题讨论】:
标签:
ios
cocoa
swift3
xcode10
swift4.2
【解决方案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
【解决方案2】:
他们找到了“x86_64”架构。那是一个 64 位英特尔处理器。你能告诉我任何配备英特尔处理器的 iPhone 吗?它们不存在。因此,找出 64 位 Intel 代码潜入您的项目的位置并将其删除。
尝试添加 armv6 是严重错误的。 armv6 是您可以在 iPhone 3GS 上找到的东西。您的应用程序应该支持 aarch64 或 arm64(这是必需的)和 armv7,如果您对支持 32 位设备感兴趣,那就是 iPhone 5/5c 或更早版本。