You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1芯片Mac+Xcode14.0构建XCFramework时BCSymbolMaps缺失求助

Xcode 14 + M1 Mac下构建XCFramework时BCSymbolMaps缺失报错分析与修复

问题背景

使用同一bash脚本构建XCFramework已有2年,切换到M1芯片Mac并升级至Xcode14.0后出现报错:

error: the path does not point to a valid debug symbols file: /Users/*******/build/Release-iphoneos.xcarchive/BCSymbolMaps/*

已确认:

  • Release-iphoneos.xcarchive目录下确实没有BCSymbolMaps文件夹
  • Xcode的「debug information format」已设置为dwarf with dsym file
  • 脚本在Xcode13.1环境下可正常运行

附原构建脚本:

# Build the framework for device and for simulator (using
# all needed architectures).
xcodebuild archive -scheme "${TARGET_NAME}" -destination="iOS" -sdk iphonesimulator SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES -archivePath "${SRCROOT}/build/Release-iphonesimulator"
xcodebuild archive -scheme "${TARGET_NAME}" -destination="iOS" -sdk iphoneos        SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES -archivePath "${SRCROOT}/build/Release-iphoneos"

ls -l "${SRCROOT}/build/"

# First, get all the UUID filepaths for BCSymbolMaps, because these are randomly generated and need to be individually added as the `-debug-symbols` parameter. The dSYM path is always the same so that one is manually added
echo "XCFramework: Generating IPHONE BCSymbolMap paths..."
IPHONE_BCSYMBOLMAP_PATHS=(${SRCROOT}/build/Release-iphoneos.xcarchive/BCSymbolMaps/*)
IPHONE_BCSYMBOLMAP_COMMANDS=""
for path in "${IPHONE_BCSYMBOLMAP_PATHS[@]}"; do
  IPHONE_BCSYMBOLMAP_COMMANDS="$IPHONE_BCSYMBOLMAP_COMMANDS -debug-symbols $path "
  echo $IPHONE_BCSYMBOLMAP_COMMANDS
done

echo "XCFramework: Generating IPHONE BCSymbolMap paths... --> Done"

# XCFramework with debug symbols
xcodebuild -create-xcframework -allow-internal-distribution \
    -framework "${SRCROOT}/build/Release-iphoneos.xcarchive/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework" \
    -debug-symbols "${SRCROOT}/build/Release-iphoneos.xcarchive/dSYMs/${FRAMEWORK_NAME}.framework.dSYM" \
    $IPHONE_BCSYMBOLMAP_COMMANDS \
    -framework "${SRCROOT}/build/Release-iphonesimulator.xcarchive/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework" \
    -debug-symbols "${SRCROOT}/build/Release-iphonesimulator.xcarchive/dSYMs/${FRAMEWORK_NAME}.framework.dSYM" \
    -output "${SF_RELEASE_DIR}/${FRAMEWORK_NAME}.xcframework"

报错原因分析

  1. Xcode 14符号生成逻辑变更:Xcode14开始,本地构建归档时默认不再生成BCSymbolMaps——这类符号文件原本主要用于App Store提交后的符号解析,本地场景下除非开启特定的符号上传/剥离配置,否则不会自动生成。
  2. 脚本硬编码路径缺陷:脚本直接用通配符${SRCROOT}/build/Release-iphoneos.xcarchive/BCSymbolMaps/*获取路径,当目录不存在时,通配符不会被shell展开,而是直接作为无效路径传入xcodebuild -create-xcframework,触发报错。
  3. M1架构适配影响:M1芯片的Xcode对destination="iOS"参数的解析逻辑有细微调整,间接影响了符号生成的分支流程,导致原本Xcode13中能触发的BCSymbolMaps生成逻辑不再生效。

修复方案

方案一:动态判断BCSymbolMaps目录,仅存在时添加参数

修改脚本中生成BCSymbolMap命令的部分,先判断目录是否存在,避免传入无效路径:

echo "XCFramework: Generating IPHONE BCSymbolMap paths..."
IPHONE_BCSYMBOLMAP_COMMANDS=""
BCSYMBOLMAP_DIR="${SRCROOT}/build/Release-iphoneos.xcarchive/BCSymbolMaps"
# 先判断目录是否存在
if [ -d "$BCSYMBOLMAP_DIR" ]; then
    IPHONE_BCSYMBOLMAP_PATHS=("$BCSYMBOLMAP_DIR"/*)
    for path in "${IPHONE_BCSYMBOLMAP_PATHS[@]}"; do
        # 再判断是否为有效文件
        if [ -f "$path" ]; then
            IPHONE_BCSYMBOLMAP_COMMANDS="$IPHONE_BCSYMBOLMAP_COMMANDS -debug-symbols $path "
            echo $IPHONE_BCSYMBOLMAP_COMMANDS
        fi
    done
fi
echo "XCFramework: Generating IPHONE BCSymbolMap paths... --> Done"

建议对模拟器端的BCSymbolMaps处理也做同样修改,避免后续出现同类问题。

方案二:强制开启BCSymbolMaps生成(如需保留该符号文件)

如果确实需要BCSymbolMaps,可在xcodebuild archive命令中显式添加参数,强制触发生成:

# 修改设备端的archive命令,添加强制生成参数
xcodebuild archive -scheme "${TARGET_NAME}" -destination="iOS" -sdk iphoneos \
SKIP_INSTALL=NO BUILD_LIBRARIES_FOR_DISTRIBUTION=YES \
DEBUG_INFORMATION_FORMAT=dwarf-with-dsym OTHER_CFLAGS="-fembed-bitcode" \
-archivePath "${SRCROOT}/build/Release-iphoneos"

注:BCSymbolMaps通常与Bitcode绑定,显式指定OTHER_CFLAGS="-fembed-bitcode"可确保Xcode触发相关符号生成流程。

内容的提问来源于stack exchange,提问作者Oded Regev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:20:28