第一次认识 React Native 就是因为热更新
所以怎麽可以不介绍大家一下呢~
AppCenter 热更新(codepush) 你听过吗?
CodePush 为一个中央仓库,开发者可以推送更新 (JS, HTML, CSS and images),应用可以从客户端 SDK 里面查询更新。
npm install --save react-native-code-push
cd ios
pod install
cd ..
先申请 appcenter 的帐号,且参照 getting start 的设定
npm install -g appcenter-cli
appcenter -v
cd ios
pod install
cd ..
appcenter login
<<输入网页的Authentication>>
App center 登入
他会跳出权限码,回到 cmd Access code from browser 填入 enter,即登入成功。
#import <CodePush/CodePush.h>
修改 sourceURLForBridge:
主要是在 release 环境的时候读取 codepush 的 jsbundle
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG // 测试 debug
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
// 删掉这个
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
// 使用这个
return [CodePush bundleURL];
#endif }
於App.js引入
import codePush from "react-native-code-push";
class App extends Component {
constructor(props) {
super(props);
}
codePushStatusDidChange(status) {
switch (status) {
case codePush.SyncStatus.CHECKING_FOR_UPDATE:
console.log('Checking for updates.');
break;
case codePush.SyncStatus.DOWNLOADING_PACKAGE:
console.log('Downloading package.');
break;
case codePush.SyncStatus.INSTALLING_UPDATE:
console.log('Installing update.');
break;
case codePush.SyncStatus.UP_TO_DATE:
console.log('Up-to-date.');
break;
case codePush.SyncStatus.UPDATE_INSTALLED:
console.log('Update installed.');
break;
}
}
codePushDownloadDidProgress(progress) {
console.log(
progress.receivedBytes + ' of ' + progress.totalBytes + ' received.'
);
}
render() {
const initRouteName = this.props.componentName || appRouter.HOME;
return (
{..... code }
);
}
}
const CodePushOptions = {
// 检查更新(ON_APP_START:启动APP/ON_APP_RESUME:程序从後台控制/MANUAL:手动控制)
checkFrequency: codePush.CheckFrequency.ON_APP_RESUME,
// 何时安装(ON_NEXT_RESTART:下次程序启动/ON_NEXT_RESUME:下次程序从後台进入前台/ON_NEXT_SUSPEND:在後台更新/IMMEDIATE:立即更新,并重新启动)
installMode: codePush.InstallMode.IMMEDIATE,
// 重启之前,在後台待的最短时间
minimumBackgroundDuration: 0,
// 强制更新并启动
mandatoryInstallMode: codePush.InstallMode.IMMEDIATE,
// 更新时的提示更新窗,iOS不支援
rollbackRetryOptions: {
delayInHours: 1, // rollback重试,1小时/次
maxRetryAttempts: 24 // rollback重试,最多尝试24次
}
};
App = codePush(CodePushOptions)(App);
export default App;
这个步骤很重要唷!!!我也是研究了很久才成功...
This mechanism allows you to easily configure your builds to produce binaries, which are configured to synchronize with different CodePush deployments.
打开 xcode 此专案 Project navigator
选取专案 targets 的 info tab
appcenter codepush release-react
-a {专案名称}
-d {环境}
-t {版本号}
-- description {叙述}
-m: 强制更新
code-push deployment ls {专案名称}
code-push deployment h {专案名称} {环境}
一个月的时间学习了很多也认清了很多,总算完成30天的铁人赛噜!!!
希望这些文章大家都可以多多指教,倘若有误的地方也欢迎提出来~
我们都是从挫败中慢慢成长长大的小小工程师!
喜欢我的文章麻烦请订阅噜! :P
参考:
app center
使用 React Native 用户端 SDK 开始
multi-deployment-testing-ios.md
记录学习内容。 以下内容和截图大多引用文章。 还不了解,内容可能有错误。 Queue 可以用 Sta...
[Day1]C# 鸡础观念- C#简介 [Day2]C# 鸡础观念- 与C#开发千里来相见 [Da...
设定 BMO 初始化、更新要更新什麽、画出 BMO 的方法 class Bmo { constru...
优惠码BFCM2021 优惠时间:只到2021/12/01 折扣内容:首四个月6折(适用於所有方案)...
终於看不见起点了,四周看起来还是有很多的参赛者在努力奔跑着,欢迎你一起陪着我们学习 Roblox 游...