【问题标题】:ERROR ITMS-90085: “No architectures in the binary. Lipo failed to detect any architectures in the bundle executable.”错误 ITMS-90085:“二进制文件中没有架构。 Lipo 未能检测到捆绑可执行文件中的任何架构。”
【发布时间】:2017-01-14 04:34:16
【问题描述】:

我们构建了一个带有多个本机绑定的 Xamarin 应用程序(iOS、Android)。该应用程序在设备和模拟器上运行良好,我们能够毫无问题地构建存档(显然)。

问题是当我们想要将构建上传到应用商店(使用应用加载程序或 xcode 7.3.1)时,我们收到以下错误:

ERROR ITMS-90085: “No architectures in the binary. Lipo failed to detect any architectures in the bundle executable.”

在应用程序上运行 lipo -info 会产生以下响应:

Architectures in the fat file: NameOfMyApp.iOS.app/NameOfMyApp.iOS are: armv7 arm64

在发布此问题之前,我们已经彻底搜索了答案,并确保了以下几点:

  • 产品名称正确
  • Xcode 已安装
  • 应用程序加载器是最新版本
  • Bundle ID 正确

如果有人有想法,我们将不胜感激!

谢谢, A.

【问题讨论】:

  • 这很可能是您的 info.plist 文件中的名称不匹配,或者与 AppStore 中先前发布的版本不匹配。请直接在最终 app bundle 的 info plist 中仔细检查,看看它是否反映了预期值
  • 感谢@Mack,但我们检查了所有名称,没有不匹配。问题是本机绑定项目中不必要的文件夹结构(请参阅我的回答)。
  • @AnthonyJanssens 好的,所以最终你解决了,太好了

标签: ios xamarin xamarin.ios app-store xcode7


【解决方案1】:

事实证明,我们在项目中做了一些原生绑定。 在其中一个绑定中,我们在项目的根目录中包含了一个框架,该框架是一个文件夹,其中包含包含 lib.a 的子文件夹。 事实证明,在编译时,整个框架文件夹结构被复制到生成的 IPA 中,这导致了问题。 解决方案是简单地提取 lib.a 并将其移动到项目的根目录并删除框架文件夹。 生成的 IPA 不再具有框架文件夹,并且提交顺利完成。

【讨论】:

【解决方案2】:

当您匆忙忘记将 Build Environment 更改为 Generic iOS Device 以进行存档时,有时可能会出现此错误!

Find image here!

【讨论】:

  • 我正在设备上调试,我只是忘记更改为通用 iOS 设备。那只是我的问题。谢谢!
  • 随时@Thais :-)
【解决方案3】:

我最近因为完全不同的原因遇到了这个错误。在应用商店提交之前,我们使用这个really popular script 从我们的应用中删除未使用的架构。

问题在于,如果您包含一个手表应用程序并使用 Xcode 10 构建,那么这个脚本会做完全错误的事情!它在ARCHS 变量中查找所有架构,并从胖二进制文件中删除所有其他架构,问题是

  • ARCHS 不包括手表架构,并且
  • 从 Xcode 10 开始,手表二进制文件很胖(由于新手表)

在 XCode 9 中,脚本会跳过 watch 的内容,但现在它会错误地删除它们。

我通过将脚本更改为仅删除模拟器架构来修复错误。

EXTRACTED_ARCHS=()
GOOD_ARCHS=()

PRESENT_ARCHS=($(lipo -archs "$FRAMEWORK_EXECUTABLE_PATH"))

if [[ "${#PRESENT_ARCHS[@]}" -lt 2 ]]
then
    echo "Framework is not a Fat binary, skipping..."
    continue
fi

for ARCH in "${PRESENT_ARCHS[@]}"
do
    if [[ "$ARCH" != x86_64 && "$ARCH" != i386 ]]
    then
        echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
        lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
        GOOD_ARCHS+=("$ARCH")
        EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
    fi
done

【讨论】:

    【解决方案4】:

    在我的例子中,这个错误有点误导。它与架构无关,只是找不到二进制文件本身。

    我正在使用 add_library 通过 CMake 生成应用扩展。 CMake 将扩展的可执行文件从 MyExtension 重命名为 libMyExtension.so

    由于“CFBundleExecutable 必须匹配捆绑目录的名称减去其扩展名。”,我不得不调整我的 CMakeLists.txt 文件以防止扩展名的可执行文件被重命名:

    set_target_properties(${APPEX_NAME} PROPERTIES
            XCODE_ATTRIBUTE_EXECUTABLE_SUFFIX ""
            XCODE_ATTRIBUTE_EXECUTABLE_PREFIX ""
    )
    

    【讨论】:

      【解决方案5】:

      就我而言,

      将每个框架的“嵌入和签名”改为“不嵌入”。

      然后重启 Xcode。无需使用 pod update 或 pod disintegrate。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-16
        • 1970-01-01
        • 2020-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多