問題描述, APP舊版用戶在更新到新版本后,APP顯示舊版的啟動頁。
第一反應,肯定是緩存引起的。是的,是緩存的問題。用戶卸載重新下載安裝就好了。
但為什么會出現這樣的緩存問題...?? 下面分析我遇到的情況:
從頭說起,我手里的 APP 1.0 版本是我之前的人寫的, 并發(fā)布迭代過了許多個小版本,由于線上發(fā)生情況比較多。后來我入職公司,要求重新寫一版新的 APP 2.0。全新的UI設計,全新的頁面邏輯,和數據處理邏輯。于是完全摒棄1.0,開始了2.0。
。。。
終于,2.0 版本發(fā)布上線。????/煙花, 聚餐...
。。。
用戶反饋:啟動頁不對。各方面檢查代碼,沒有問題。于是告訴用戶是手機緩存的問題,卸載重新安裝試一下。用戶反饋,確實可以。
又有用戶反饋這個情況。嗯 這是個問題了,得弄清楚是什么。
核查自己的代碼,項目里面完全沒有1.0版本的影子。只有一個地方是一樣的,Bundle Indentifier。很顯然,不是因為它。
一系列的百度、博客...... 咦~ LaunchScreen.storyboard 的啟動圖,會把圖片緩存到手機里。
去看 1.0 的源碼,看到了它的啟動圖是用的 LaunchScreen.storyboard(以前我也這么用,特別是UI只給的圖有限的時候回)。
我這個 2.0 里面使用的啟動圖實現方式是 Assets.xcassets 里面的添加 launchImage(我的UI太好了,給我切了每個屏幕尺寸的啟動圖,么么噠)。
難道這是問題發(fā)生所在? 測試:
情況一:在手機上面運行 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,正常。
/----- ↓ -----/
可以得出結果了,同一項目的不同版本啟動頁設置方式,要么統(tǒng)一使用LaunchScreen.storyboard實現,要么使用 Assets.xcassets - launchImage實現。
版本間交叉使用的話,會容易出現問題。
/----- ↑ -----/
我遇到的這種情況,各位大猿 大獅正常情況是不會遇到的。一般項目都是統(tǒng)一規(guī)劃,搭好架構,分工開發(fā)。像我這種,直接推翻前面APP版本的,幾乎是沒有的(獨立開發(fā),與前面那人習慣又不一樣),之前又沒有遇到過。現在我在這個位置,那這個鍋得是我的。
是緩存,緩存的很讓人措手不及, MARK一下。
順便提一下,Xcode 9 拖文件進項目的方式,會導致文件讀取不到。文件包括 圖片,第三方的庫等。需使用 右鍵 - Add file to "項目"的方式添加文件。
個人拙見,僅供參考。 歡迎各位大猿、大獅提供寶貴意見。