天天看點

ios實作熱更新(無需發新版本實作app添加新功能)

目前能夠實作熱更新的方法,總結起來有以下三種

1. 使用facebook 的開源架構 reactive native,使用js寫原生的ios應用

ios app可以在運作時從伺服器拉取最新的js檔案到本地,然後執行,因為js是一門動态的

腳本語言,是以可以在運作時直接讀取js檔案執行,也是以能夠實作ios的熱更新

2. 使用lua 腳本。lua腳本如同js 一樣,也能在動态時被。之前憤怒的小鳥使用

lua腳本做的一個插件 wax,可以實作使用lua寫ios應用。熱更新時,從伺服器拉去lua腳本

然後動态的執行就可以了。遺憾的是 wax目前已經不更新了。

上面是網上現在能夠搜到的熱更新方法。

xcode 6 之後,蘋果開放了 ios 的動态庫編譯權限。所謂的動态庫,其實就是可以在運作時加載。

正好利用這一個特性,用來做ios的熱更新。

1.

建立一個動态庫,如圖:

ios實作熱更新(無需發新版本實作app添加新功能)

動态庫包含需要使用的viewcontroller,當然可以包含任何需要使用的自定義ui和邏輯。

動态庫的入口是一個jkdylib的類。它的.h和.m檔案分别如下:

.m檔案

上述代碼意圖非常明顯,

就是調用該動态庫的時候

在該函數中,建立一個viewcontroller 然後使用mainbundler 的navigationcontroller push 建立的viewcontroller,顯示動态庫的ui界面。

而動态庫中的jkviewcontroller 内容則可以根據需要随便定義。

2. 完成上述動态庫的編譯工作後,現在需要做的就是在主工程中,寫一段加載該動态庫的代碼。

主工程目錄如下:

ios實作熱更新(無需發新版本實作app添加新功能)

在最重要的viewcotrooler裡面,定義了加載動态庫的方法:

viewcontroller視圖中有一個按鈕,點選按鈕後,從 document目錄下面找到動态庫(雖然此時document下并沒有動态庫),動态庫的名稱約定好味

jkdylib.framework

然後使用nsbundle 加載該動态庫,具體見代碼。

加載成功後,調用在動态庫中實作的方法

編譯該工程,然後運作到手機上,然後退出該程式

3. 打開itunes 然後将動态庫同步到剛才的測試工程目錄下。

4.在此打開測試工程程式,點選button,則會發現能夠進入在動态庫中定義的ui界面了。

關于動态更新的思考:

采用動态庫方式實作熱更新其實還是有一個問題,就是如何在主工程和動态庫之間共享組建

比如網絡元件以及其他等等第三方元件。

目前我沒發現好方法,隻能在動态庫和主工程之間分别添加并且編譯。

繼續閱讀