使用codepush实现热跟新的总结
首先要说一下什么是热跟新,就是好热的跟新,就是不用经过appstore发布审核,然后你只需要发一个包到codepush的服务器上,微软的codepush服务就会把包安装到用户终端上,快速,方便;那有的小伙伴说了,我发的包有bug,怎么办?微软的工程师已经为你想好了一切,可以执行回滚的操作,就是说,用户的手机终端就算装了新包,我也可以回滚调那个包;就是给用户的感知可能不太好,我擦,昨天明明有那个功能的,今天打开手机怎么没有了,这就要求开发者发包的时候要经过充分的检查;所以说codepush是一个神器,有没有缺点,肯定有,就是xcode里 project 代码的改动没有办法通过codepush去发包,只能脚本和图片,说了这么多,前奏太长,进入到正题。
通过谷歌搜索codepush呢,会搜出来一堆,对于英语水平只能看得懂小电影的同学来说,那些文档真是又臭又长,推荐俩个地址:
这俩个地址呢,中文版比英文版少很多内容,可以对照着看,但是还是建议看英文版的,逼格很高啊,哦,还有一个地址codepush微软官方文档,
1.npm install -g code-push-cli,这个呢就是在你的终端上装一个code-push工具,装完 输入code-push ,效果是这样的:
有没有觉得很吊,这才是第一步,
2.code-push register,这个呢就是注册一下,会跳到一个链接,选择什么账户去注册这个服务,可以选择微软企业账户,微软个人账户,还有github,是不是大多都会选择github。
3.code-push app add appname,这个就是把你的app的bundleid加进去,你也可以code-push app rename 修改名字,执行完这步命令之后呢,就是这样的了:
请谅解我打了吗萨克,无码之王,默认的是staging(临时环境)和production(生产环境),staging呢就是用来测试,开发环境使用的,production就是正式环境了,通俗的说就是AppStore里面的,如果说你看了官方文档,看完之后你可能会一头雾水,staging和production是怎么对应到我的app的环境的,这个在后面会说明,这俩个key有妙用。到这一步安装工具就差不多了。
4.npm i react-native-code-push --save;安装react-native工具包,安装这个包可以调用codeopush的api,需要在js代码中调用一下特定的api,和codepush的服务端进行通信,如图,
这只是一个实例,CodePush 提供的方法超级多,可以满足现实的各种“奇葩”需求,然后还要添加依赖,可以用cocoapods,这个东西安装很麻烦,推荐rnpm,执行一下rnpm link,就可以建立起链接了。cocoapods安装
5.第三步说到的key这时候就要用起来了,先上几张官方网站的图,它们是这样说的,
按照文档的四步成神曲来做的话,那么就ok了,但是事有愿违,对于了解xcode project 目录意义的开发者来说,这四步还是不简单的,第一步说的是我需要在配置那里再加一个key值staging(其实可以随便定义的),然后选到project tab上,点击加号加一你自定义的codepush_key,最后在你的info.plist xml中加上这个key,就ok了,然后我这样做了,没什么吊用,我还在github上用蹩脚的英语问微软的工程师了,知道今天上午我才找到这个问题,就是我加的key没有在project中,而是在target中,那么project在哪呢,上图:
看到那个红的吗萨克没有,点击一下,选择project中的项目,然后走上面的流程,给俩个链接,
最后在把AppDelegate.m中的 jsCodeLocation = [[NSBundlemainBundle]URLForResource:@"main"withExtension:@"jsbundle"];
改成jsCodeLocation = [CodePushbundleURL];
上图:
好的,做完这些,那么恭喜你,前奏差不多了,是时候进入到高潮,说起这个,想起了一部电影,浪潮,推荐一下,大电影哦,你懂的链接;
6:使用 react-native bundle 将你的改动打包到一个main.jsBundle 文件夹,建议在你的项目中建立一个文件夹来存放main.jsBundle;
使用这个命令 react-native bundle --platform ios --entry-file index.ios.js (一般都是这个入口)
--bundle-output ./你建立的文件夹/main.jsbundle --dev false
7:第6步把包打包在了本地,那么下面就要推送到codepush的服务上了,我只是给出一种命令,详细的说明到官方文档中看。
比如 code-push release-react f8app ./上面的文件夹 1.0.0 -d(deployment的缩写) staging 或者production 就看你发布了哪个环境上了,1.0.0是你现在app的版本号,重头戏来了,比如我发布到了staging临时环境上,那么是怎样和我app环境对应的,好吧,其实我告诉你,毛关系没有,打开你的xcode :
找到scheme,你会看到 run 取的是debug的配置, Archive 取的是release的配置,你是不是有点明白,bingo!deployment和我app的 development environment没有联系
比如我的release 的keyvalue 是production的值,那么使用的时候就发布到production,这样你的release版本的app才能更新。
8.做完以上的一切,你以为就结束了吗,no,这才是刚开始,做完上面的几步,这个codepush的流程就通了,就像买了一个裸车,还需要装饰,codepush提供很多的方法,可以实现比如提醒用户是否需要更新,亲测就算这次点了不更新,下次还是会提示;不提醒用户更新,偷偷摸摸的更新掉;更新完立即重启;显示更新进度等功能,我也没有完全搞通,我的车还要装饰一下,这里说一下,就是用户启动app的时候呢 ,会从codepush的服务把包下载下来,所以有时候会有几分钟的时间,怎样是最好的体验,个人觉得偷偷摸摸的更新最好了。
好了,就说到这里,codepush的高级语法就不说了,再说就天亮了,第一次发文,还请海涵,可能特么的就没人看,悲催,如果觉得还可以,那么请关注我,给个赞,如果你是个妹子,可以一起交流技术,在react-native 这片深海里一起游泳,请穿上火辣的泳衣。