跳转至

热更新 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

每次发布母包或热更新包时:

  1. 构建 JavaScript Bundle,并同时生成对应的 SourceMap;
  2. 按照 React Native 符号文件上传的要求打包为 sourcemap.zip
  3. 上传时填写与 RUM 数据相同的 app_idenvversion

例如,update-one 上报的 version1.2-cp-1,上传它的 SourceMap 时,version 也必须填写 1.2-cp-1

上传方式请参考 脚本上传 SourceMap前台页面上传。不要删除仍有用户使用的旧版本 SourceMap。

文档评价

文档内容是否对您有帮助?