ReactNative 使用微軟的CodePush進行熱更新,繼續填坑

1.別被開發環境騙了javascript

在咱們開發react native的時候,一鍵運行工程,js改了,只要cmd+R就能夠刷新了。而後會輕易覺得真正app上線的時候也是同樣,只要app一打開就是最新的。html

其實!這是一個騙局!java

假如沒有微軟的CodePush框架,react native只是一個用來開發原生本地app的工具,和原生開發並沒有大區別。node

緣由以下:react

(1)目前支持ios的nodejs解釋環境必須運行在MacOS上,假如你的linux服務器,根本就運行不了針對ios的react開發環境linux

(2)蘋果不容許即時的動態更新的app上架ios

 

2.微軟的codepush框架react-native

微軟的codepush框架確實解決了這個問題,其操做原理是這樣:服務器

(1)把react中的js打包,生成一個app(react-native官方就支持到這一步)app

(2)把最新的js包都打包上傳到微軟的服務器(codepush框架實現)

(3)在app中判斷本地js包的版本號和微軟服務器的版本號,而後所有下載下來後實現更新(codepush框架實現)

 

codepush.sync(paramas)能夠實現更新,通常咱們放在app啓動的時候進行。或者能夠在APP中增長一個按鈕,點擊就運行更新。就像在開發環境中使用cmd+R同樣從新load。可是微軟的服務器速度讓人呵呵。

 

3.codepush的使用

 詳細的框架集成過程能夠參考這兩個博客:

http://blog.csdn.net/oiken/article/details/50279871

http://www.lai18.com/content/2561926.html

 

(1)這裏有個坑,我在使用他們的方法打包資源並上傳的時候,經過更新,app沒法加載出資源文件!

因此我打包和上傳的方式以下,MoxieSDKRN是我在CodePush註冊的APP名稱

打包:(圖片+JS)
react-native bundle --entry-file index.ios.js --bundle-output ./bundle/main.jsbundle --platform ios --assets-dest ./bundle --dev false

上傳:
code-push release MoxieSDKRN ./bundle 1.0.0

 

這裏還有一個坑,會讓你的圖片顯示不出,就是把你的結果拖入工程時,對於assets文件夾,你要選擇create folder reference,而不是  create folder group.

正確的結果是assets文件夾是一個藍色的文件夾,整個一塊兒做爲bundle resources

 

(2)這裏另一個坑是:

如上面的博客所說,你APP內plist文件寫的版本號多是1.0.0,因此你的reactjs打包上傳的版本也要是1.0.0(而不是1.0.1這樣遞增),你須要和APP保持一致,而後服務器會根據你最新上傳的且和APP同樣的版本做爲最新版。

查看版本記錄可使用下面的命令。

 

4.經常使用的一些命令:

查看歷史上傳過的版本:

code-push deployment history MoxieSDKRN Staging

控制更新:

(1)彈窗提示更新

codePush.sync({ updateDialog: true, installMode: codePush.InstallMode.IMMEDIATE });

(2)下次啓動時更新

codePush.sync();

 

若是但願自建熱更新服務來實現,能夠參考個人這篇博客:

http://www.cnblogs.com/rayshen/p/5737293.html

相關文章
相關標籤/搜索