错误ITMS-90085:“二进制文件中没有架构。 Lipo未能检测到捆绑可执行文件中的任何体系结构。“

时间:2016-09-06 16:26:47

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

我们已经构建了一个带有几个本机绑定的Xamarin应用程序(iOS,Android)。该应用程序在设备和模拟器上运行良好,我们能够建立一个没有任何问题的存档(显然)。

问题是当我们想要将构建上传到app store时(使用app loader或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
  • 应用程序加载器是最新版本
  • 捆绑ID是正确的

如果有人有任何想法,将非常感谢帮助!

谢谢, 甲

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

有时可能会在您赶时间并忘记将构建环境更改为通用iOS设备进行存档时发生此错误!

Find image here!

答案 2 :(得分:1)

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

问题在于,如果您包括watch应用程序并使用Xcode 10进行构建,则此脚本将完全错误地执行操作!它在ARCHS变量中查找所有体系结构,并从胖二进制文件中删除所有其他体系结构,问题是

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

在XCode 9中,脚本将跳过监视内容,但现在错误地将其删除。

我通过将脚本更改为仅删除模拟器体系结构来解决该错误。

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

答案 3 :(得分:0)

就我而言,该错误有点误导。它与架构无关,只是找不到二进制本身。

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

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

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

答案 4 :(得分:-3)

就我而言,

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

然后重新启动Xcode。无需使用Pod更新或Pod分解。