Releases: reactnativecn/react-native-update-cli
Release list
v2.22.5
v2.22.4
Fix Hermes base equivalence verification for UIntSwitchImm jump-table offsets. Tighten StringSwitchImm/UIntSwitchImm normalization so semantic operands remain checked, with regression coverage for IDs, labels, ranges, and malformed switch shapes.
v2.22.3
Fix: publish no longer sends JSON null for the Hermes chain metadata (baseVersionId / baseHash / bytecodeVersion) when no base was used — servers rejected that with "Expected baseHash string". Fields are now omitted, which every server version accepts.
v2.22.2
v2.22.1
Fix: the Hermes delta-mode verification (--verifyHermesBase) reported false mismatches when the base came from a different lineage (wider GetById/LoadConstString variants, moved switch jump tables) and needlessly fell back to a plain compile. No behavior change otherwise.
v2.22.0
Hermes delta mode (-base-bytecode)
bundlenow compiles Hermes bundles against the app's previous HBC (--hermesBase auto, default), keeping Hermes string IDs stable across versions: hot-update patches shrink 5–30×. Base comes from the server (GET /app/:id/hermesBase), is verified by sha256 and cached under.pushy/cache/<sha256>(500 MB / 20 files,--cacheMaxMb,PUSHY_CACHE_DIR).--hermesBase nonedisables it;--hermesBase <file.hbc|.ppk|.apk|.ipa>uses a local artifact (e.g. the store build) as base.--verifyHermesBase(default on) compares the delta build's disassembly with a plain compile and silently falls back on any mismatch — the feature can never block a release.- hermesc always runs with
-output-source-map: debug info is stripped from the bytecode (15–40% smaller, same as RN release builds); the Hermes .map stays in the intermediate directory. publish/uploadApk/uploadIpa/uploadAppreportbundleHash,bytecodeVersion,baseVersionId,baseHashand seed the local cache.- New command:
pushy cache [clean].
v2.21.2
feat(diff): record copiesCrc for every copied entry in package diffs (pdiff). Same-path copies now carry a content checksum so clients can verify path-matched files before copying; backward-compatible (existing clients only consult copiesCrc on path-lookup miss). Part of BUNDLEHASH_MIGRATION §4.2.1 runtime guarantee.
v2.21.1
修复
发布流程
- 发布版本号改为以 GitHub Release tag 为唯一来源,发布前硬校验 package.json 版本与 tag 一致,并用
npm pack --dry-run验证包内容(修复 v2.21.0 发布失败) - Node 18 验证扩展为同时加载 CLI 与编程入口(exports/diff)
控制面
- 编程接口
publish()现在正确转发appId/config,不再静默回退到 update.json 中的应用 minPackageVersion与maxPackageVersion同时提供时取交集(此前上界被忽略);混用不同的包选择器(packageId / packageVersion / packageVersionRange / min+max)现在显式报错- 登录 token 文件以 0600 权限写入(已存在文件同样收紧),并在登录时即加入 .gitignore
打包与差分
- 原生包内 bundle 查找改为锚定精确匹配,
.map/.backup等条目不再可能顶替真实 bundle 的 bundleHash - bundletool 仅在 PATH 中不存在(ENOENT)时才回退
npx node-bundletool,其余错误原样报告 - AAB 上传的中间 APK 改用私有 mkdtemp 临时目录,避免共享 /tmp 的可预测路径
- diff 产物 ZIP 与 universal.apk 提取补全读写流错误传播(只读目录 / 磁盘满不再挂起)
- 流式 diff 路径下 HBC 变换补丁仅在小于基线补丁时才被采用,与内存路径约束一致
v2.21.0 因发布流水线版本号问题未能上 npm,本版本包含其全部内容。
v2.21.0
v2.20.4
parseAab now reports bundleHash, hashing the base-module bundle (base/assets/index.android.bundle) — the same bytes the universal APK carries, so it matches what uploadAab registers. parseIpa/parseApk/parseApp already reported it since 2.20.3.