【问题标题】: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 或更早版本。

      【讨论】: