在Xcode Beta中分发构建时出现“IPA处理失败”

9
在尝试分发IPA时,Xcode会抛出一个错误:
“IPA处理失败”
步骤:
Product -> Archive. -> Distribute -> Enterprise/Development -> “IPA处理失败”

enter image description here

Xcode: 版本号为11.0 beta 3 (11M362v)

操作系统: 10.15 Beta (19A501i)

NB: 我在升级到Xcode 11后成功构建了一次,但是在代码中进行了额外的计数检查后,从那时起我就无法成功构建了,甚至无法重新导出上一个成功生成的存档。


更新:我认为这是由于我在项目中包含了一些框架导致的,当时第三方框架没有为新编译器发布。现在他们已经发布并支持Swift 5.1和Xcode 11编译器。所以对我来说,这个问题已经不再存在了。


也许这个有帮助?:https://dev59.com/IFEG5IYBdhLWcg3wgv82#64932592 - Sebastian
6个回答

8
以下解决方案对我有帮助。在创建iPA时取消勾选位代码检查,尽快点击下一步,并且不要让xcode调用api来验证iPA。
取消重建时使用bitocde并尽快点击下一步。 从xcode重新构建-取消此选项

但是如果我的应用支持iPad和iPhone呢? - Lal Krishna
我的应用在应用瘦身期间失败了。还在继续调查中。 - Tonny Xu
1
创建IPA时,请取消勾选位代码选项并尽快单击下一步。不要让Xcode调用API验证iPA。 - Boopathi Marappan
很高兴听到这个解决方案对您有用。但对我来说是不同的。我已经在问题中更新了。我再也没有错误了。无论如何,感谢您的回答。我为您的努力点赞。一旦得到更多的赞,我将接受这个答案。 - Lal Krishna

5
相同的问题,相同的技巧仍然存在于Xcode 11.1中即使项目设置已禁用位代码,在分发应用时仍会执行检查。当前的解决方法是在该窗口出现后立即按下回车键,因为“下一步”按钮具有焦点,或者非常快速地单击它。
注意:当它失败时,从日志中断言故障似乎对otools和一个或多个第三方框架的某些期望架构数有一些抱怨。(不知道是否使用Xcode 11+重新构建这些框架可以解决问题而无需解决方法)
更新
这种“方法”仍然适用于Xcode 11.3
希望能帮到你

这只是一个惊人的修复!哈哈,苹果加油! - mKane

1

我认为这是由于我在项目中包含的某些框架引起的,当时第三方框架还没有针对新编译器发布。

现在它们已经发布并支持Swift 5.1和Xcode 11编译器。所以现在问题已经不再存在。


我正在使用一个框架。我尝试使用Swift 5创建新的框架,但它仍然给我相同的错误。 - Akshay Pure

1
我刚刚从“嵌入式框架”中删除了WEbRTC框架,因为我手动从Mac安装位置添加了WEbRTC框架。删除后,项目正常工作,并且应用程序成功构建到Apple Store Connect。我可能错了,但我认为“嵌入式框架”仅适用于使用Carthage安装的框架。

enter image description here


0

检查一下日志报告中是否有任何框架导致了这个问题,我的问题是在使用亚马逊的Chime SDK时发生的。

Assertion failed: Expected 4 archs in otool output:
/var/folders/gw/92tbc3ls1mgfcg8qn1gh4whh0000gr/T/IDEDistributionOptionThinning.~~~aSD3W8/Payload/telehealth.app/Frameworks/AmazonChimeSDK.framework/AmazonChimeSDK:

我的解决方案是根本不嵌入框架。

0

我在Xcode 11.3中遇到了同样的问题。 我使用以下步骤解决了这个问题。这对我有效。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接