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

Xcode Cloud下Crashlytics调试符号(dSYMs)上传问题

Xcode Cloud下Crashlytics调试符号(dSYMs)上传问题

兄弟,我太懂你这种抓瞎的感觉了——Bitcode都关了,明明传了Archive里的dSYMs,Crashlytics还是说有缺失,完全不知道剩下的dSYMs藏在哪对吧?别慌,咱们一步步来搞定。

首先,Bitcode禁用后,dSYMs可不只待在Archive的dSYMs文件夹里,Xcode Cloud编译时产生的dSYMs还会散落在DerivedData的其他子目录里:比如项目依赖的第三方框架、静态库的dSYMs,还有主APP编译产物目录下的dSYMs,可能在$CI_DERIVED_DATA_PATH/Build/Products/下对应你的构建配置文件夹(比如Release-iphoneos)里。

那咱们直接修改脚本,把搜索范围扩大,把所有可能的dSYMs都捞出来上传就行。给你调整后的脚本:

#!/bin/sh
set -e

# 先根据你的项目结构,正确设置GoogleService-Info.plist的路径
GSP_PATH="MyApp/SupportingFiles/GoogleService-Info.plist"
# 定义要搜索dSYMs的根目录:包含Archive的dSYMs目录和整个DerivedData
SEARCH_ROOTS=("$CI_ARCHIVE_PATH/dSYMs" "$CI_DERIVED_DATA_PATH")

echo "正在扫描所有可能存在的dSYM文件..."

# 递归搜索所有.dSYM结尾的文件夹,去重避免重复上传
ALL_DSYMS=$(find "${SEARCH_ROOTS[@]}" -name "*.dSYM" -type d | sort | uniq)

if [[ -n $ALL_DSYMS ]]; then
    echo "找到的dSYM文件列表:"
    echo "$ALL_DSYMS"
    
    echo "开始批量上传到Crashlytics..."
    # 切换到upload-symbols所在的目录(和你原来的逻辑保持一致)
    cd ..
    # 把所有找到的dSYMs作为参数传给上传命令
    "$CI_DERIVED_DATA_PATH/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/upload-symbols" -gsp "$GSP_PATH" -p ios $ALL_DSYMS
else
    echo "没有找到任何dSYM文件,跳过上传步骤。"
fi

给你拆解下这个脚本的关键点:

  • 扩展了搜索范围:同时扫描Archive的dSYMs目录和整个DerivedData,把所有藏起来的dSYMs都找出来
  • 用find命令递归搜索,sort | uniq是为了避免同一个dSYM被多次搜索到(比如可能在不同目录下有副本)
  • 批量上传:upload-symbols命令本身就支持一次性传入多个dSYM路径,不用一个个单独传

另外给你两个小Tips:

  • 要是怕搜索范围太广,也可以给find加个过滤,只搜对应构建配置的目录,比如只找Release相关的:把find那行改成find "${SEARCH_ROOTS[@]}" -path "*/Release-*" -name "*.dSYM" -type d
  • 要是不确定路径对不对,可以在脚本里加几行echo "$CI_DERIVED_DATA_PATH"、echo "$PWD",这样CI运行时会打印出当前目录和DerivedData的路径,方便你排查

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 07:35:29