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
相关产品推荐
相关产品推荐

