如何修复Xcode 11中的“ IPA处理失败”错误?

时间:2019-08-06 18:45:07

标签: ipa xcode11 ios13

当我尝试使用Distribute APP选项创建IPA文件时。它给出了“ IPA处理失败”错误。

我已经检查了日志文件:IDEDistribution.standard.log文件。

  

2019-08-06 18:36:52 +0000警告:配置问题:平台   iPhoneSimulator.platform没有任何非模拟器SDK;忽略   它正在扫描IPA ... 2019-08-06 18:36:52 +0000断言失败:   otool输出中预期有4个弓:   /var/folders/4t/rpjk7pd55t16jfrd32y98gf0lb2t68/T/IDEDistributionOptionThinning.~~~a4cZJc/Payload/demo.app/Frameworks/AppAuth.framework/AppAuth:   马赫头         魔术cputype cpusubtype caps文件类型ncmds sizeofcmds标志MH_MAGIC_64 X86_64 ALL 0x00 DYLIB 23
  3680 NOUNDEFS DYLDLINK TWOLEVEL NO_REEXPORTED_DYLIBS加载命令0

15 个答案:

答案 0 :(得分:49)

我遇到了同样的问题。我已使用此脚本修复了此问题。
请遵循相同的步骤。

enter image description here

构建阶段->加号按钮->创建新的运行脚本阶段

 APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

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"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")

FRAMEWORK_TMP_PATH="$FRAMEWORK_EXECUTABLE_PATH-tmp"

case "${TARGET_BUILD_DIR}" in
*"iphonesimulator")
    echo "No need to remove archs"
    ;;
*)
    if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "i386") ; then
    lipo -output "$FRAMEWORK_TMP_PATH" -remove "i386" "$FRAMEWORK_EXECUTABLE_PATH"
    echo "i386 architecture removed"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
    fi
    if $(lipo "$FRAMEWORK_EXECUTABLE_PATH" -verify_arch "x86_64") ; then
    lipo -output "$FRAMEWORK_TMP_PATH" -remove "x86_64" "$FRAMEWORK_EXECUTABLE_PATH"
    echo "x86_64 architecture removed"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_TMP_PATH" "$FRAMEWORK_EXECUTABLE_PATH"
    fi
    ;;
esac

echo "Completed for executable $FRAMEWORK_EXECUTABLE_PATH"
echo $(lipo -info "$FRAMEWORK_EXECUTABLE_PATH")

done

答案 1 :(得分:24)

1。取消选中“从位码重建”, 2.单击下一个快速快速快速。 (速度也很重要。)

enter image description here

如果不是,它将显示IPA处理失败。 enter image description here

答案 2 :(得分:12)

为解决类似的问题,我使用了以下方法:

  • 在应用程序的目标中,我进入了Build Phases
  • 之后,在Embed FrameworksEmbed App Extensions部分中,我用以下脚本添加了Run script
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

我从这里获取的脚本:https://medium.com/@maximbilan/ios-submission-unsupported-architectures-issues-733917a98cc3,感谢Daniel Kennet!

此外,请注意,此脚本还可能导致编译错误。在这种情况下,以下是解决方法:Errors building Xcode Project after adding in Run Script fatal error: lipo: input file

最后,我还注意到在本地(在开发设备/模拟器上)编译应用程序时必须关闭此脚本

希望有帮助!

答案 3 :(得分:8)

您应该在Embed Frameworks阶段下检查Xcode > build

如果在这里介绍了您的框架,则不能在框架中使用i386\x86_64。因为Embed Frameworks已复制到应用程序。为了控制应用程序的大小,Embed Frameworks中的框架必须最简化。

您可以使用Link Binary With Libraries来介绍您的框架,如下所述:https://github.com/Carthage/Carthage/issues/1046

请注意,您需要添加一个新的运行脚本并向其中添加框架,否则它将崩溃。enter image description here

答案 4 :(得分:4)

在Xcode 11中存档时,似乎不允许使用具有i386或x86_64体系结构的动态库。我通过从提到的框架中删除那些体系结构来解决了该问题

答案 5 :(得分:2)

对于那些尝试使用 M1 芯片(硅)的人

完全退出 Xcode(从菜单栏中关闭并退出)

转到查找器 -> 应用程序

右键单击 Xcode 并选择“获取信息”

检查罗塞塔

enter image description here

再次尝试打开 Xcode

答案 6 :(得分:1)

我们已通过在应用程序中使用的所有框架中将Always Embed Swift Standard Libraries设置为NO来解决此问题。

答案 7 :(得分:1)

我不得不取消选中“从位码重建”

答案 8 :(得分:1)

在我的情况下,应用程序稀疏失败,原因是我的内部框架依赖Alamofire,并且二进制文件是嵌入和签名的。从嵌入和签名-> 请勿嵌入更改嵌入选项可以立即解决我的问题。

在我看来,此问题背后的所有逻辑是使应用程序包的大小尽可能地降低,但苹果公司嵌入框架会增加此大小。我认为这就是App Thinning所抱怨的全部。因此,对于此问题的一般解决方案,请检查可以增加应用程序捆绑包的所有外部框架。特别是如果您使用的是迦太基。

答案 9 :(得分:1)

启用 Bitcode 导致了我的问题。前往

Build Settings -> Enable Bitcode 并将其设置为 NO

再次尝试存档,它应该可以工作。

答案 10 :(得分:0)

我发现SDWebImageMapKit可用的SDWebImage框架存在问题。我刚刚将其删除并获得成功。

答案 11 :(得分:0)

我必须在Frameworks中选择“不嵌入”以解决此问题

答案 12 :(得分:0)

我的问题是我只有一个嵌入式二进制框架。

我从项目中删除了它以进行更新。导致Xcode删除了嵌入框架的构建阶段(因为没有更多的框架可嵌入)。

在添加了新版本的框架之后,embed Binaries阶段处于构建阶段顺序的底部。最终成为失败的原因。

在运行脚本之前,我必须重新排序嵌入框架以解决该问题。

答案 13 :(得分:0)

我有一段时间没有更新我的 cocoapods,通过更新和重新安装 pods 来修复它。

sudo gem install cocoapods
pod update
pod deintegrate
pod install

答案 14 :(得分:-1)

  1. 打开终端

  2. 打开相应框架的项目拖动路径到Terminal例如。

    cd /Users/xxxxx/Desktop/MyProject/ABC.framework

  3. 在以下命令中设置您的框架名称并运行

    lipo-remove i386 ABC -o ABC && lipo-remove x86_64 ABC -o ABC