安装和配置
安装
# 先全局安装命令行工具,每台电脑只用装一次
npm i -g react-native-update-cli
# 然后在项目目录中安装热更新模块
npm i react-native-update
# 然后进入ios目录安装iOS模块
cd ios && pod install
配置Bundle URL
iOS
在AppDelegate.mm
或AppDelegate.m
增加如下代码
// ... 其它代码
#import "AppDelegate.h"
#import "RCTPushy.h" // <-- import头文件,注意要放到if条件外面
// 可能项目里有一些条件编译语句,例如有些版本RN自带的flipper
// #if DEBUG
// 注意**不要**在这里面引入"RCTPushy.h"
// #import <FlipperKit/FlipperClient.h>
// ...
// #endif
// 修改sourceURLForBridge方法
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
// 原先DEBUG这里的写法不作修改(所以DEBUG模式下不可热更新)
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
#else
return [RCTPushy bundleURL]; // <-- 把这里非DEBUG的情况替换为热更新bundle
#endif
}
Android
在MainApplication
中增加如下代码
// ... 其它代码
// ↓↓↓请注意不要少了这句import
import cn.reactnative.modules.update.UpdateContext;
// ↑↑↑
class MainApplication : Application(), ReactApplication {
override val reactNativeHost: ReactNativeHost =
object : DefaultReactNativeHost(this) {
// ↓↓↓将下面这一段添加到 DefaultReactNativeHost 内部!
override fun getJSBundleFile(): String? {
return UpdateContext.getBundleUrl(this@MainApplication)
}
// ↑↑↑
// ...其他代码
}
}
禁用 android 的 crunch 优化
android
会在生成 apk 时自动对 png 图片进行压缩,此操作既耗时又影响增量补丁的生成。为了保证补丁能正常生成,您需要在android/app/build.gradle
中关闭此操作:
...
android {
...
signingConfigs { ... }
buildTypes {
release {
...
// 添加下面这行以禁用crunch
crunchPngs false
}
}
}
...
登录和创建应用
注册帐号后,在项目根目录下运行命令
$ pushy login
email: <输入你的注册邮箱>
password: <输入你的密码>
发布原生基准版本
iOS
$ pushy uploadIpa <ipa后缀文件>
Android
$ pushy uploadApk android/app/build/outputs/apk/release/app-release.apk
发布热更新版本
尝试修改一行代码(文本将版本1修改为版本2),然后pushy bundle --platform <ios|android>
命令来省城新的热更新版本
$ pushy bundle --platform android
Bundling with React Native version: 0.22.2
<各种进度输出>
Bundled saved to: build/output/android.1459850548545.ppk
Would you like to publish it?(Y/N)