IOS离线包ipa、热更新版本、以及遇到的坑总结

前言:
本人之前所在的公司没做过ios的热更新功能,都是直接打了ipa包给客户用,然后换了家公司后,有热更新功能,在开发模式一切正常,后面有版本更新需求,就打了个比当前更高版本的包提交,后面app store审核通过就发布版本了,当我以为一切正常后,老板跟我说下载的app里面图标、甚至是改动的东西都是以前的。和没有更新过一样,后面查了查,是因为需要重新生成jsbundle,我也照做了,可是打出来的看着是自己最新代码了,但是一些离线的图标icon图片也还是不能显示。看来自己的经验还是非常非常需要提升,后面查了很久,一路摸坑过来,对热更新有了更进一步的了解。

后来自己跑release包,在Xcode控制台出现了以下的问题:

图片.png

这是因为从热更新服务器上拿不到资源文件,而本地又没有造成的。

后来找了几篇文章参考解决了问题,参考链接:
http://www.javashuo.com/article/p-zpcjhzti-bv.html
https://www.jianshu.com/p/88b54e003027
https://www.jianshu.com/p/3afb5247ac3f

https://blog.csdn.net/weixin_34301307/article/details/88116934?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-88116934-blog-97501687.pc_relevant_aa2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-88116934-blog-97501687.pc_relevant_aa2&utm_relevant_index=1

https://blog.csdn.net/fengyuzhengfan/article/details/54950656?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-54950656-blog-88116934.pc_relevant_aa2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-54950656-blog-88116934.pc_relevant_aa2&utm_relevant_index=1

我也将自己的步骤记录下,避免以后又遇到同样的问题忘记了.

一、包含热更新的ipa包

每一次打新的ipa包时,可能会新添加一些静态资源,而这些新的静态资源是需要重新添加到assets静态包里面的,要是不添加打出来的包就看不到静态资源文件。

1、终端执行以下命令

这命令即重新生成静态资源文件,打成ipa包后会在这个资源文件夹里面找

react-native bundle --entry-file='index.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios' --assets-dest ./ios/

2、这时候将ios/assets这个文件夹拖入到Xcode你的项目下(或者在Xcode项目目录下 Add files to xxx 添加)

图片.png
图片.png

3、clean build 然后重新打包即可,或者你可以run release包试看行不行。

二、纯离线包

1、重新生成资源文件jsbundle

在 ' xxx项目目录/ios/ ' 下新建 bundles 文件夹,这是等下用来执行指令生成jsbundle文件以及其他静态资源文件的
在当前项目目录终端执行以下指令,就会自动的jsbundle和其他资源打包到 “xxx项目目录/ios/bundles" 了,这是重新生成资源文件,若是不重新生成,就会永远都是以前的链接文件

react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ./ios/bundles/main.jsbundle --assets-dest ./ios/bundles/

执行完后会看到如下图的


图片.png

2、选择本地资源文件,而不是选择从热更服务器上获取

在AppDelegate.m文件中,找到如下图的


图片.png
return [[NSBundle mainBundle] URLForResource:@"bundles/main" withExtension:@"jsbundle"];     //本地资源文件

注意:看注释,需要热更新的就把使用本地资源文件的注释掉,需要打离线包的就用本地资源文件

3、打开Xcode,添加我们指令生成的文件到项目中

图片.png
图片.png

添加完后出现这个就可以了


图片.png

然后就可以正常打离线包了,注意要选择release再打包。

中文官网推荐的RN热更 https://pushy.reactnative.cn/ , 本人项目的热更是接手后就有的,所以中文官网推荐的热更还没试过,但是看了文档,感觉还是挺不错的,下次新建项目,就集成这个。

testFlight说明:https://help.apple.com/app-store-connect/#/devdc42b26b8

https://developer.apple.com/documentation/xcode/testing-a-release-build

你可能感兴趣的:(IOS离线包ipa、热更新版本、以及遇到的坑总结)