最近開始一個React Native的新項目。按慣例,在創建完項目後,先集成CodePush熱更新功能。 這種活已經乾過不止一兩次了,當然沒啥問題,直接上手開乾。 可問題恰恰出在了本以為應該很順利的地方。 首先,在用 cpcn-client 工具給項目安裝 cpcn-react-native 包時, ...
最近開始一個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 熱更新時遇到的坑,以及折騰過程。而這些坑在之前卻沒遇到過。
這一圈折騰下來,整整花了我一天的時間!
希望這篇文章對其他開發者能有幫助,少點折騰的時間。