iOS 程式外掛程式及功能動態更新思路
來源:互聯網
上載者:User
所用架構及語言 iOS用戶端-Wax(開發憤怒的小鳥的串連Lua 和 Objc的架構),Lua,Objc, 服務端-Java(用於返回外掛程式頁面) 工具架構連結地址:Wax - https://github.com/probablycorey/wax Netty - https://netty.io/ 用做Http伺服器,返回頁面 由於Lua指令碼語言,不需要編譯即可運行,這點是我的這個思路可以執行的大前提,再加上蘋果允許像Lua這樣的指令碼的存在,這一思路才能得以實現。個人感覺這一思路有點類似於ipad上的一款編程應用 Codea,Codea允許我們再ipad利用Lua編程,寫遊戲。
本文: 1.在iOS程式裡面調用wax_start( "init.lua", nil);這個init.lua即是我們外掛程式的最起始的類似於程式main函數的類,lua指令碼的起點。 2.在程式中預留功能按鈕 請求伺服器擷取外掛程式列表,在挑選清單後可以將此項對應的Lua指令碼(TestController.lua)下載到用戶端,這樣我們用戶端就多了一個相當於Objc類的檔案了,不同於objc的是這個類不需要編譯,現在即可運行了。 3.我們在用戶端還有一點要做的是要儲存我們的外掛程式列表及所在路徑,這樣程式才知道去哪裡找到相應的Lua指令碼來執行。 思路很簡單,不知道自己說清楚了沒有,下面我把自己寫的例子貼上來,與大家交流一下
服務端的程式,點擊HttpStaticFileServer啟動伺服器,這個程式是Netty的樣本,在這足夠用了,未作修改,TestController.lua是服務端要返回給用戶端的指令碼。 用戶端程式,主要是RootViewController中與Lua互動,在此類中設定伺服器的地址及對應連接埠
程式運行效果如下圖:
樣本程式下載路徑: http://download.csdn.net/detail/wssand44/4878972
http://download.csdn.net/detail/wssand44/6740495(服務端用的python,較版本一,server 易部署)
因為蘋果沙箱機制,我們程式無法再安裝後訪問資源套件目錄,所以從官網下載的framework無法在應用到實際應用中,我們需要修改wax.m中的如下方法,修改後如下
void wax_setup() {
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
NSFileManager *fileManager = [NSFileManager defaultManager];
// [fileManager changeCurrentDirectoryPath:[[NSBundle mainBundle] bundlePath]];
[fileManager changeCurrentDirectoryPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]];
lua_State *L = wax_currentLuaState();
lua_atpanic(L, &wax_panic);
luaL_openlibs(L);
luaopen_wax_class(L);
luaopen_wax_instance(L);
luaopen_wax_struct(L);
addGlobals(L);
[wax_gc start];
}
然後重新編譯framework,再匯入到我們的程式中。