IOS 程序插件及功能动态更新思路┊
http://www.cocoachina.com/bbs/read.php?tid=129723&keyword=%B2%E5%BC%FE
帶圖片版 CSDN路徑--?http://blog.csdn.net/wssand44/article/details/8288178
CSDN下載路徑 --?http://download.csdn.net/detail/wssand44/4878972
工具框架鏈接地址:Wax -?https://github.com/probablycorey/wax??Netty -?https://netty.io/??用做Http服務器,返回頁面
所用框架及語言 IOS客戶端-Wax(開發憤怒的小鳥的連接Lua 和 Objc的框架),Lua,Objc, 服務端-Java(用于返回插件頁面)
????????由于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腳本來執行。
思路很簡單,不知道自己說清楚了沒有,下面我把自己寫的例子貼上來,與大家交流一下
因為蘋果沙箱機制,我們程序無法再安裝后訪問資源包目錄,所以從官網下載的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,再導入到我們的程序中。
轉載于:https://www.cnblogs.com/needly/p/3684888.html
總結
以上是生活随笔為你收集整理的IOS 程序插件及功能动态更新思路┊的全部內容,希望文章能夠幫你解決所遇到的問題。