React Native构建归档缺少Hermes框架dSYM文件
问题描述
在将React Native应用发布至Apple App Store时,开发者常遇到以下报错:
The archive did not include a dSYM for the hermes.framework with the UUIDs [...]
Ensure that the archive's dSYM folder includes a DWARF file for hermes.framework with the expected UUIDs.
此错误表明Xcode归档过程中未能生成Hermes引擎的调试符号文件(dSYM)。若无此文件,将无法在应用商店提交或进行崩溃分析。
根本原因
React Native版本≥0.64默认使用Hermes引擎,但iOS构建流程不会自动生成其dSYM文件。这些调试符号对崩溃分析至关重要。
完整解决方案
步骤1:确定React Native版本
在项目根目录执行:
npm list react-native
# 或
yarn list react-native
记录输出版本号(如 0.72.10
)
步骤2:下载对应Hermes制品
访问Maven仓库: https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/
- 导航至匹配的React Native版本目录
- 下载
react-native-artifacts-{版本号}-hermes-ios-release.tar.gz
文件
快速定位
可直接拼接URL:https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/{版本号}/
步骤3:解压文件并定位框架
解压下载的文件并进入框架目录:
tar -xzvf react-native-artifacts-0.72.10-hermes-ios-release.tar.gz
cd react-native-artifacts-0.72.10-hermes-ios-release/destroot/Library/Frameworks/universal/hermes.xcframework/ios-arm64
步骤4:生成dSYM文件
在终端执行下列命令:
dsymutil hermes.framework/hermes -o hermes.framework.dSYM
成功执行后将生成hermes.framework.dSYM
目录
步骤5:集成dSYM文件
将生成的dSYM文件上传至你的崩溃分析平台:
选项1:通过Xcode自动上传
- 打开Xcode项目
- 将
hermes.framework.dSYM
拖放到:markdownXcode › 项目导航器 › <项目名> › Frameworks › Hermes.framework › dSYMs
选项2:手动上传至分析平台
# Sentry示例
sentry-cli upload-dif --org your-org --project your-project hermes.framework.dSYM
# Firebase Crashlytics示例
/path/upload-symbols -gsp GoogleService-Info.plist hermes.framework.dSYM
关键注意
- 每次更新React Native或Hermes版本需重复此流程
- Debug构建无需dSYM,仅Release归档需要
- 确保dSYM的UUID匹配报错提示(可用
dwarfdump --uuid hermes.framework.dSYM
验证)
技术原理解释
dSYM文件是将内存地址映射回源代码的关键调试符号文件。由于Hermes作为预编译二进制框架集成到React Native中,Xcode不会自动处理其调试符号。
手动生成过程包含:
- dsymutil工具:从Mach-O二进制文件中提取调试信息
- 框架匹配:严格匹配React Native/Hermes版本确保兼容性
- UUID校验:确保崩溃报告能正确关联符号表
后续验证
重新归档应用后,可通过以下方式确认dSYM包含:
- 在Xcode中:
Window › Organizer › Archives › 右键archive › Show in Finder
- 右键
YourApp.xcarchive › 显示包内容 › dSYMs/
- 检查是否存在
hermes.framework.dSYM
目录
此方法已在React Native ≥0.64版本(默认启用Hermes)中验证有效,正确执行后即可消除报错并成功分发应用。