Skip to content

React Native构建归档缺少Hermes框架dSYM文件

问题描述

在将React Native应用发布至Apple App Store时,开发者常遇到以下报错:

log
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版本

在项目根目录执行:

bash
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/

  1. 导航至匹配的React Native版本目录
    Maven React-Native制品目录截图
  2. 下载react-native-artifacts-{版本号}-hermes-ios-release.tar.gz文件
    Hermes iOS发布包截图

快速定位

可直接拼接URL:
https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/{版本号}/

步骤3:解压文件并定位框架

解压下载的文件并进入框架目录:

bash
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文件

在终端执行下列命令:

bash
dsymutil hermes.framework/hermes -o hermes.framework.dSYM

成功执行后将生成hermes.framework.dSYM目录

步骤5:集成dSYM文件

将生成的dSYM文件上传至你的崩溃分析平台:

选项1:通过Xcode自动上传

  1. 打开Xcode项目
  2. hermes.framework.dSYM拖放到:
    markdown
    Xcode › 项目导航器 › <项目名> › Frameworks › Hermes.framework › dSYMs

选项2:手动上传至分析平台

bash
# 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不会自动处理其调试符号。

手动生成过程包含:

  1. dsymutil工具:从Mach-O二进制文件中提取调试信息
  2. 框架匹配:严格匹配React Native/Hermes版本确保兼容性
  3. UUID校验:确保崩溃报告能正确关联符号表

后续验证

重新归档应用后,可通过以下方式确认dSYM包含:

  1. 在Xcode中:Window › Organizer › Archives › 右键archive › Show in Finder
  2. 右键YourApp.xcarchive › 显示包内容 › dSYMs/
  3. 检查是否存在hermes.framework.dSYM目录

此方法已在React Native ≥0.64版本(默认启用Hermes)中验证有效,正确执行后即可消除报错并成功分发应用。