首页 > 解决方案 > 命令 PhaseScriptExecution 因非零退出代码 Xcode 11(BuildPhase 脚本)而失败

问题描述

我创建了一个自定义通用框架,我需要将此脚本添加到其构建阶段,以便通用框架将删除未使用的架构。如果我打算在应用程序中使用应用程序商店,这是必要的。

但我收到编译错误(命令 PhaseScriptExecution 失败,退出代码为非零): 在此处输入图像描述

在此处输入图像描述

脚本:

# Type a script or drag a script file from your workspace to insert its path.
FRAMEWORK="TestFramework"
FRAMEWORK_EXECUTABLE_PATH="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/$FRAMEWORK.framework/$FRAMEWORK"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRAFRAMEWORK="TestFramework"
FRAMEWORK_EXECUTABLE_PATH="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/$FRAMEWORK.framework/$FRAMEWORK"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"CTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

这来自此处的教程: 在 Xcode 10.2 和 iOS 12 中编写自定义通用框架

问题可能只是一个不正确的字符串或一个不应该出现的空格,但我不知道。

调查结果:我知道它与 for 循环或其中的某些东西有关,因为当我删除 for 循环并且它的内容/嵌套代码时,错误消失了。

重现:要重现错误,您可以简单地制作一个虚拟 Xcode 项目,然后选择名为的项目选项卡 → yourProject.xcodeproj,选择目标 → 项目名称 → 选择构建阶段 → 按“+” → 新建运行脚本阶段 → 将脚本命名为“删除未使用的架构脚本” → 最后复制并粘贴代码。

标签: iosswiftxcodeshellsh

解决方案


for 循环可能是这里的罪魁祸首。他们可以捕获发生的任何退出代码。我在这方面遇到了类似的问题。


推荐阅读