热更新 SourceMap 版本匹配¶
React Native 应用通过 CodePush 等 OTA 方案热更新 JavaScript Bundle 时,APK 或 IPA 的应用版本不会改变。为了让每个热更新包匹配到正确的 SourceMap,需要为母包和每个热更新包设置不同的 RUM version,并使用相同的 version 上传对应的 SourceMap。
version 长度限制
version 的长度不要超过 20。建议使用 1.2-cp-1 这类短版本号,不要使用过长的热更新描述。
版本示例¶
假设应用版本为 1.2:
| JavaScript Bundle | RUM version |
上传 SourceMap 使用的 version |
|---|---|---|
| 母包 | 1.2 |
1.2 |
| 第一个热更新包 | 1.2-cp-1 |
1.2-cp-1 |
| 第二个热更新包 | 1.2-cp-2 |
1.2-cp-2 |
配置 version¶
在 SDK 初始化时,通过 dataModifier 修改 version 字段:
const rumVersion = '1.2-cp-1';
let config: FTMobileConfig = {
datawayUrl: datawayUrl,
clientToken: clientToken,
env: 'prod',
dataModifier: {
version: rumVersion,
},
};
await FTMobileReactNative.sdkConfig(config);
每个 Bundle 设置自己的 rumVersion。该配置只修改上报数据中的 version,不会修改 Android versionName、iOS MARKETING_VERSION 或 CodePush 的目标版本。
原生符号文件¶
完整的 React Native sourcemap.zip 需要同时包含当前 Bundle 的 JavaScript SourceMap 和对应母包的原生符号文件。原生崩溃仍需要使用 Android mapping.txt、符号 .so 或 iOS dSYM 进行解析。
纯 JavaScript 热更新不会改变原生符号文件,因此可以复用母包的原生符号文件;但每个热更新版本都需要将它们与当前 JavaScript SourceMap 一起打包,并使用该热更新版本的 version 上传。具体目录结构请参考 React Native 符号文件上传。
上传 SourceMap¶
每次发布母包或热更新包时:
- 构建 JavaScript Bundle,并同时生成对应的 SourceMap;
- 按照 React Native 符号文件上传的要求打包为
sourcemap.zip; - 上传时填写与 RUM 数据相同的
app_id、env和version。
例如,update-one 上报的 version 是 1.2-cp-1,上传它的 SourceMap 时,version 也必须填写 1.2-cp-1。
上传方式请参考 脚本上传 SourceMap或前台页面上传。不要删除仍有用户使用的旧版本 SourceMap。