问题描述, APP旧版用户在更新到新版本后,APP显示旧版的启动页。
第一反应,肯定是缓存引起的。是的,是缓存的问题。用户卸载重新下载安装就好了。
但为什么会出现这样的缓存问题...? 下面分析我遇到的情况:
从头说起,我手里的 APP 1.0 版本是我之前的人写的, 并发布迭代过了许多个小版本,由于线上发生情况比较多。后来我入职公司,要求重新写一版新的 APP 2.0。全新的UI设计,全新的页面逻辑,和数据处理逻辑。于是完全摒弃1.0,开始了2.0。
。。。
终于,2.0 版本发布上线。👏👏/烟花, 聚餐...
。。。
用户反馈:启动页不对。各方面检查代码,没有问题。于是告诉用户是手机缓存的问题,卸载重新安装试一下。用户反馈,确实可以。
又有用户反馈这个情况。嗯 这是个问题了,得弄清楚是什么。
核查自己的代码,项目里面完全没有1.0版本的影子。只有一个地方是一样的,Bundle Indentifier。很显然,不是因为它。
一系列的百度、博客...... 咦~ LaunchScreen.storyboard 的启动图,会把图片缓存到手机里。
去看 1.0 的源码,看到了它的启动图是用的 LaunchScreen.storyboard(以前我也这么用,特别是UI只给的图有限的时候回)。
我这个 2.0 里面使用的启动图实现方式是 Assets.xcassets 里面的添加 launchImage(我的UI太好了,给我切了每个屏幕尺寸的启动图,么么哒)。
难道这是问题发生所在? 测试:
情况一:在手机上面运行 2.0 的代码,再运行 1.0 的代码后,启动图会显示 1.0 的。之后再运行 2.0 的代码,还是显示 1.0。
情况二:卸载后 先运行 1.0 的代码,再运行 2.0 的代码, 启动图显示的仍然是 1.0 的。
嗯 大概是因为这了。 接着,copy 2.0 项目代码,改成 LaunchScreen.storyboard 方式加载。重复上面测试步骤,结果显示正常。copy 1.0 代码,改成 launchImage 方式,结果显示正常。
追加测试,手机运行 1.0 代码,去App Store下载新版,结果1.0启动图。 修改 1.0 使用 launchImage,去App Store下载新版,OK,正常。
/----- ↓ -----/
可以得出结果了,同一项目的不同版本启动页设置方式,要么统一使用LaunchScreen.storyboard实现,要么使用 Assets.xcassets - launchImage实现。
版本间交叉使用的话,会容易出现问题。
/----- ↑ -----/
我遇到的这种情况,各位大猿 大狮正常情况是不会遇到的。一般项目都是统一规划,搭好架构,分工开发。像我这种,直接推翻前面APP版本的,几乎是没有的(独立开发,与前面那人习惯又不一样),之前又没有遇到过。现在我在这个位置,那这个锅得是我的。
是缓存,缓存的很让人措手不及, MARK一下。
顺便提一下,Xcode 9 拖文件进项目的方式,会导致文件读取不到。文件包括 图片,第三方的库等。需使用 右键 - Add file to "项目"的方式添加文件。
个人拙见,仅供参考。 欢迎各位大猿、大狮提供宝贵意见。