4

我在我的项目中实现了一个新库(名为Eureka),现在尝试上传到 App Store / TestFlight 时出现错误。

在此处输入图像描述

其中包括“不支持的架构”、“无效的段对齐”和“二进制文件无效。这个二进制文件似乎不是用 Apple 的链接器构建的”。

在实施 Eureka 之前,我没有任何这些错误。我正在运行 Xcode 7.3

我应该注意我通过 Carthage 安装了框架。

4

3 回答 3

4

使用以下运行脚本代码从添加的库、框架中删除不受支持的架构。

项目名称 -> 构建阶段 -> 通过以下代码创建新的运行脚本。而已。快乐编码!!!

echo "Target architectures: $ARCHS"

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"

# remove simulator's archs if location is not simulator's directory
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
于 2020-08-18T11:40:22.263 回答
4

问题是 Xcode 为模拟器 (i386) 和设备 (x86_64) 预编译了动态库。您可以实现此运行脚本以删除未使用的架构。

于 2016-04-05T05:18:59.980 回答
0

使用 dwarfdump 检查符号和切片匹配

dwarfdump --uuid path_to_dSYM_or_binary

这将为您提供 UUID 和切片的列表。您还会发现 UUID 将出现在 Apple 的崩溃报告中。

lipo 删除不需要的架构

lipo -remove <architecture> -output <binary_name> <binary_name>
于 2019-01-15T15:28:44.117 回答