解决:发布到苹果商店时错误The archive did not include a dSYM for the hermes.framework with the UUIDs_the archive did not include a dsym for the flutter
React Native 发布到苹果商店的时候遇到以下错误:
The archive did not include a dSYM for the hermes.framework with the UUIDs [58A2B46F-BC4E-34AE-82CE-EF76DFDEA9A8]. Ensure that the archive\'s dSYM folder includes a DWARF file for hermes.framework with the expected UUIDs.
目前这个问题解决方法比较少, Google 也没有一个完全可以解决, 但是根据各种大神的回复, 进行综合之后, 得到了一个完整的通用的解决方案.
以下是以 hermes.framework
缺少 dSYMs
为例, 如果是其他的 framework
类似的处理即可.
出问题的地方在 [你的项目]/ios/Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework
.├── Info.plist├── ios-arm64├── ios-arm64_x86_64-maccatalyst├── ios-arm64_x86_64-simulator├── xros-arm64└── xros-arm64_x86_64-simulator
这些目录中缺少了 dSYMs
打开页面 下载 dSYM, 注意找到对应 React Native 一样的版本号, 下载 release 的包.
在 hermes.xcframework
的每个子目录都创建一个目录 dSYMs
, 然后解压下载的 release 包, 把 hermes.framework.dSYM
放在新建的目录中. 需要注意的是不同的目录要对应不同的文件.
处理后, 我的目录结构如下, 再次打包上传, 一切正常.
.├── Info.plist├── ios-arm64│ ├── dSYMs│ │ └── hermes.framework.dSYM│ └── hermes.framework│ ├── Info.plist│ └── hermes├── ios-arm64_x86_64-maccatalyst│ ├── dSYMs│ │ └── hermes.framework.dSYM│ └── hermes.framework│ ├── Resources -> Versions/Current/Resources│ ├── Versions│ └── hermes -> Versions/Current/hermes├── ios-arm64_x86_64-simulator│ ├── dSYMs│ │ └── hermes.framework.dSYM│ └── hermes.framework│ ├── Info.plist│ └── hermes├── xros-arm64│ ├── dSYMs│ │ └── hermes.framework.dSYM│ └── hermes.framework│ ├── Info.plist│ └── hermes└── xros-arm64_x86_64-simulator ├── dSYMs │ └── hermes.framework.dSYM └── hermes.framework ├── Info.plist └── hermes
这样打包, 发布就完成了.
如果执行了 clean, 可能文件就被清除了, 再打包, 又有问题, 可以创建一个 run script
脚本:
#!/bin/bashecho \"[Custom Script] Copy dSYMs to hermes-engine 1\"# Define source and destination pathscp -R ${PROJECT_DIR}/dSYMs/ios-arm64/dSYMs ${PROJECT_DIR}/Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework/ios-arm64/cp -R ${PROJECT_DIR}/dSYMs/ios-arm64_x86_64-maccatalyst/dSYMs ${PROJECT_DIR}/Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework/ios-arm64_x86_64-maccatalyst/cp -R ${PROJECT_DIR}/dSYMs/ios-arm64_x86_64-simulator/dSYMs ${PROJECT_DIR}/Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework/ios-arm64_x86_64-simulator/cp -R ${PROJECT_DIR}/dSYMs/xros-arm64/dSYMs ${PROJECT_DIR}/Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework/xros-arm64/cp -R ${PROJECT_DIR}/dSYMs/xros-arm64_x86_64-simulator/dSYMs ${PROJECT_DIR}/Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework/xros-arm64_x86_64-simulator/# Copy the directoryecho \"Successfully copied dSYMs to Hermes destination\"
重点注意的地方
- 下载的 dSYMs 的版本要和
react-native
一致 - 每个目录都要新建一个
dSYMs
文件夹 - 每个目录复制的文件要对应, 看名字, 名字可能不完全一样
clean
之后会清除复制的文件, 可以在Build Phases
中创建一个Run Script
在每次打包的时候执行复制的操作
进一步排查
如果经过上面的操作, 依然存在问题, 可以进一步排查问题
1. 检查准备复制的的 dSYM
的 UUID
进入 ios-arm64
执行以下命令:
dwarfdump --uuid dSYMs/dkdoo_app_pad.app.dSYM
可以查看 UUID
2. 打包后, 检查打包文件中的 dSYM
的 UUID
cd ~/Library/Developer/Xcode/Archives
找到对应的 xcarchive
, 进入目录, 执行以下命令:
dwarfdump --uuid dSYMs/dkdoo_app_pad.app.dSYM
可以查看 UUID 是否和报错的信息里面的 UUID 一样, 如果不一样, 表示上面的操作没有正确或者可能存在缓存, 可以重新在 xcode
中 clean
, 再打包.