最近开始一个React Native的新项目。按惯例,在创建完项目后,先集成CodePush热更新功能。

这种活已经干过不止一两次了,当然没啥问题,直接上手开干。

可问题恰恰出在了本以为应该很顺利的地方。

首先,在用 cpcn-client 工具给项目安装 cpcn-react-native 包时,Android版一切正常,但iOS版却有个莫名其妙的什么unicode编码错误。

我的项目刚刚创建,还什么代码都没做改动,不可能是自己的代码的问题。

刚开始我猜测是网络的问题导致的,这种问题在开发过程中经常遇到。于是开启了XX上网方式,然后再试。可问题依旧。

可之前的项目中没遇到过这种情形啊。于是我想试试旧项目会不会有这种情况发生。

打开一个旧项目,为了安全起见,特意将旧项目复制到了一个新的文件夹进行试验。用 cpcn-client 工具给项目重新安装 cpcn-react-native 包。一切正常!这也太奇怪了!

至此,不得不仔细查看 cpcn-client 打印出来的日志。从如天书一般的日志中大致可得知,cpcn-react-native 包实际上已经安装了,是在执行 pod install 时失败了。

既然是这样,那我试试不用 cpcn-client 工具,直接在命令行中执行此操作看看。

于是在项目根目录下执行以下命令:

npx pod-install

怀着忐忑的心情等待。。。。

然后,成功了!

好吧。问题虽然解决了,但我并不知道是什么原因造成的。对比新项目与旧项目,因为旧项目是较早之前创建的,用的React Native的版本是0.6x,而新项目的版本是0.7x。所以,我猜测这问题是由于React Native的版本不同导致的。

这个问题虽然解决了,但马上遇到了另一个问题。

在测试热更新功能是否可用时,又是iOS版,在 cpcn-client 上点击“发布新版本”时,日志栏中提示以下错误:

"CFBundleShortVersionString" key needs to specify a valid semver string

从错误日志来看,应该是版本号的问题。这个问题在以前的项目中同样没有遇到过。不得不说React Native就是坑多!抱怨归抱怨,还是得想办法解决问题。

打开 XCode,给项目重新设了个版本号“1.0.1”,回到 cpcn-client ,再次点击“发布新版本”,问题依旧!

可从错误日志来看,确实是版本号的问题啊。

那么,现在这个 "CFBundleShortVersionString" 的值究竟是什么呢?

打开 /ios/项目名/info.plist ,发现 "CFBundleShortVersionString" 的值是 “$(MARKETING_VERSION)” 。那么问题很可能出在这里。cpcn-client 可能将它当成了一个字符串,而不是一个变量。

于是用 “1.0.1” 替换掉 “$(MARKETING_VERSION)” 。

回到 cpcn-client ,再次点击“发布新版本”,正常了!

 

=================

 

以上就是最近在新项目中集成 CodePush 热更新时遇到的坑,以及折腾过程。而这些坑在之前却没遇到过。

这一圈折腾下来,整整花了我一天的时间!

希望这篇文章对其他开发者能有帮助,少点折腾的时间。