博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用codepush进行ReactNative热部署
阅读量:6086 次
发布时间:2019-06-20

本文共 3368 字,大约阅读时间需要 11 分钟。

hot3.png

项目背景

  1. 公司的最新的一个项目像使用ReactNative进行开发,首先是要进行相关的技术调研。
  2. 之前公司的项目使用的是H5开发,当时我并没有参加,但是调研ReactNative的时候被告知,需要能实现ReactNative的热部署,貌似H5就可以支持热部署。
  3. 进过几天的挣扎和疯狂的翻阅google的资料并且查找各种博客,终于找到了如何让ReactNative项目实现热部署的方法了,也就是使用CodePush
  4. 这个是 的官方网站地址,这个是CodePush地址

官方对CodePush的介绍

CodePush is a cloud service that enables Cordova and React Native developers to deploy mobile app updates directly to their users’ devices. It works by acting as a central repository that developers can publish certain updates to (e.g. JS, HTML, CSS and image changes), and that apps can query for updates from (using our provided client SDKs). This allows you to have a more deterministic and direct engagement model with your end-users, while addressing bugs and/or adding small features that don’t require you to re-build a binary and/or re-distribute it through any public app stores.

准备工作(iOS)

CodePush支持多平台,两者热部署方式略有差异,具体去官网查看,本人暂时只在上开发

  1. Mac
  2. Xode7.2
  3. iOS9.2
  4. React-Native 1.7
  5. codePush-1.6.0-beta
  6. 使用真机release测试。如果没有,可以参照这篇例子
  7. 使用的RN例子就是ReactNative官方那个AwesomeProject项目例子(在我机器里项目名称AwesomeProject2)

起步

  1. 安装客户端

    npm install -g code-push-cli
  2. 创建账户(我使用的GitHub的账号)

    code-push register
  3. 将自己的App项目加入服务

    code-push app add 

安装CodePush插件

  1. 使用如下命令在项目的更目录下执行(类似给项目加一个ReacNatice plugin)

    npm install --save react-native-code-push
  2. 打开项目AwesomeProject,在项目根目录下会有文件夹react-native-code-push

    1

  3. 将react-native-code-push文件夹中CodePush.xcodeproj直接拉入项目中Libraries中

    2

  4. Libraries/CodePush.xcodeproj/Products中的libCodePush.a直接拖入 Link Binary With Libraries中

    3

  5. 点击Link Binary With Libraries的加号,选择libz.tbd加入

    4

  6. 在Build Settings的Header Search Paths那一项中加入$(SRCROOT)/../node_modules/react-native-code-push

    5

配置CodePush插件

  1. 在Xcode打开项目在AppDelegate.m中引入

    #import "CodePush.h"
  2. AppDelegate中找到 加载发布版本中的JS Bundle文件的那段代码

    jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
  3. 将这段话替换为:

    jsCodeLocation = [CodePush bundleURL];
    1. 该文章是讨论在Release下进行相关的操作,如果是debug版本加上如下代码,系统在运行时候会自动切换。

      NSURL *jsCodeLocation;#ifdef DEBUG    jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"];#else    jsCodeLocation = [CodePush bundleURL];#endif
  4. 在命令行下使用code-push deployment ls <AppName> --displayKeys 查出Staging的值,在info.plist文件中添加CodePushDeploymentKey并且把Staging的值填入。 

    6

  5. Info.plist中将Bundle versions string, short的值修改为1.0.0

插件使用(在相关js文件中调用)

  1. 在js文件中引入(该项目文件是index.ios.js)

    import codePush from "react-native-code-push";
  2. componentDidMount调用sync方法,当你的App启动的时候会在后台更新

    componentDidMount(){    codePush.sync();  }

  1. 到此位置,所有的基本配置已经全部完成了,可以运行起你的程序啦,不过注意是Release不是Debug
  2. 后面将会讲到发布更新了,这里的跟新分两种中,一种是仅仅是js代码的改变更新,还有一种是js+image的更新

发布更新 (JavaScript-only)

当你修改js文件的时候,并且想立刻发布。则仅仅需要以下的操作:

  1. 将你修改的js文件(当前文件是index.ios.js)打包为二进制文件,放入指定的地方(当前位置为根目录)。

    react-native bundle --platform ios --entry-file index.ios.js --bundle-output codepush.js --dev false
  2. 将二进制文件push到staging 环境中

    code-push release 
    [--deploymentName
    ][--description
    ][--mandatory]code-push release AwesomeProject2 codepush.js 1.0.0

发布更新 (JavaScript + images)

  1. –assets-dest 就是你放图片的位置(当前仅仅是做测试,实际上最好建个文件夹专门存入相关图片)

    react-native bundle --platform ios --entry-file index.ios.js --bundle-output ./main.jsbundle --assets-dest ./
  2. 将二进制文件push到staging 环境中

    code-push release AwesomeProject2  codepush.js 1.0.0

然后在你手机上退出App 再次进入就会发现界面改变啦!!

其他热更新思路:

 

 

转载于:https://my.oschina.net/zhugenqiang/blog/691163

你可能感兴趣的文章
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>
AOL重组为两大业务部门 全球裁员500人
查看>>
字符设备与块设备的区别
查看>>
为什么我弃用GNOME转向KDE(2)
查看>>
Redis学习记录初篇
查看>>
爬虫案例若干-爬取CSDN博文,糗事百科段子以及淘宝的图片
查看>>
Web实时通信技术
查看>>
第三章 计算机及服务器硬件组成结合企业运维场景 总结
查看>>
IntelliJ IDEA解决Tomcal启动报错
查看>>
默认虚拟主机设置
查看>>
php中的短标签 太坑人了
查看>>
[译] 可维护的 ETL:使管道更容易支持和扩展的技巧
查看>>
### 继承 ###
查看>>
数组扩展方法之求和
查看>>
astah-professional-7_2_0安装
查看>>
函数是对象-有属性有方法
查看>>
uva 10107 - What is the Median?
查看>>
Linux下基本栈溢出攻击【转】
查看>>
c# 连等算式都在做什么
查看>>