使用Azure Pipelines提交App Store时如何获取dSYM文件(适配Firebase Crashlytics)
使用Azure Pipelines提交App Store时如何获取dSYM文件(适配Firebase Crashlytics)
我之前也踩过一模一样的坑!用Azure DevOps Pipeline搭配Fastlane打包上传App Store后,Firebase Crashlytics一直弹“缺少dSYM文件”的提示,折腾了好一阵才摸清楚门道,给你一步步说清楚怎么解决:
一、先搞懂dSYM在Azure Pipeline里的存储位置
其实dSYM文件的生成位置主要和你的编译方式有关:
- 如果是用Xcode直接编译(包括Azure Pipeline的Xcode任务),dSYM默认会存在构建产物的DerivedData目录里,具体路径大概是这样的:
$(Agent.BuildDirectory)/iOSApp/Build/Products/Release-iphoneos/YourAppName.app.dSYM(把YourAppName换成你自己的应用名,Release-iphoneos对应你的编译配置,要是Debug编译就是Debug-iphoneos) - 要是你用Fastlane的
gymaction打包,那更省心——gym默认会把dSYM和.ipa一起导出到你指定的输出目录,一般是Fastlane的output文件夹,或者你在gym里配置的output_directory路径下,直接去那里找就行。
你也可以在Pipeline里加个脚本步骤确认位置,比如用Bash脚本跑这个命令,会列出所有dSYM文件夹的路径:
find $(Agent.BuildDirectory) -name "*.dSYM" -type d
二、怎么确保dSYM能被Firebase Crashlytics识别到
光找到还不够,得把它打包上传,还要确保Pipeline里的流程能稳定拿到这个文件:
先确认Xcode项目的配置正确:
打开你的Xcode项目,在Build Settings里搜Debug Information Format,把Release配置改成DWARF with dSYM File——这是生成dSYM的前提,要是没开这个,后面全白搭!在Pipeline中把dSYM打包成ZIP:
Firebase只认ZIP格式的dSYM,所以得先把dSYM文件夹打包。用Bash脚本的话可以这么写:zip -r YourAppName.dSYM.zip $(Agent.BuildDirectory)/iOSApp/Build/Products/Release-iphoneos/YourAppName.app.dSYM记得把路径换成你实际的dSYM位置哦。
上传到Firebase Crashlytics:
这里有两种常用方式:- 用Fastlane的
crashlyticsaction:在你的Fastfile里加这段代码,打包完直接上传:crashlytics( dsym_path: "./YourAppName.dSYM.zip", google_services_path: "./GoogleService-Info.plist" ) - 用Firebase CLI的命令:先确保Pipeline里装了Firebase CLI,然后跑这个命令:
firebase crashlytics upload-symbols -gsp ./GoogleService-Info.plist -p ios ./YourAppName.dSYM.zip
- 用Fastlane的
把dSYM存为Pipeline构建产物:
最后别忘了在Azure Pipeline里加个“发布构建产物”的步骤,把生成的dSYM.zip文件上传到Azure DevOps的Artifacts里,万一后面要排查问题,随时能下载回来用。
备注:内容来源于stack exchange,提问作者Kittu
相关产品推荐
相关产品推荐

