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服務(wù)器,返回頁(yè)面
所用框架及語(yǔ)言 IOS客戶(hù)端-Wax(開(kāi)發(fā)憤怒的小鳥(niǎo)的連接Lua 和 Objc的框架),Lua,Objc, 服務(wù)端-Java(用于返回插件頁(yè)面)
????????由于Lua腳本語(yǔ)言,不需要編譯即可運(yùn)行,這點(diǎn)是我的這個(gè)思路可以執(zhí)行的大前提,再加上蘋(píng)果允許像Lua這樣的腳本的存在,這一思路才能得以實(shí)現(xiàn)。個(gè)人感覺(jué)這一思路有點(diǎn)類(lèi)似于ipad上的一款編程應(yīng)用 Codea,Codea允許我們?cè)賗pad利用Lua編程,寫(xiě)游戲。
正文:
1.在IOS程序里面調(diào)用wax_start("init.lua",nil);這個(gè)init.lua即是我們插件的最起始的類(lèi)似于程序main函數(shù)的類(lèi),lua腳本的起點(diǎn)。
2.在程序中預(yù)留功能按鈕 請(qǐng)求服務(wù)器獲取插件列表,在選擇列表后可以將此項(xiàng)對(duì)應(yīng)的Lua腳本(TestController.lua)下載到客戶(hù)端,這樣我們客戶(hù)端就多了一個(gè)相當(dāng)于Objc類(lèi)的文件了,不同于objc的是這個(gè)類(lèi)不需要編譯,現(xiàn)在即可運(yùn)行了。
????????3.我們?cè)诳蛻?hù)端還有一點(diǎn)要做的是要保存我們的插件列表及所在路徑,這樣程序才知道去哪里找到相應(yīng)的Lua腳本來(lái)執(zhí)行。
思路很簡(jiǎn)單,不知道自己說(shuō)清楚了沒(méi)有,下面我把自己寫(xiě)的例子貼上來(lái),與大家交流一下
因?yàn)樘O(píng)果沙箱機(jī)制,我們程序無(wú)法再安裝后訪問(wèn)資源包目錄,所以從官網(wǎng)下載的framework無(wú)法在應(yīng)用到實(shí)際應(yīng)用中,我們需要修改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,再導(dǎo)入到我們的程序中。
轉(zhuǎn)載于:https://www.cnblogs.com/needly/p/3684888.html
總結(jié)
以上是生活随笔為你收集整理的IOS 程序插件及功能动态更新思路┊的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 学习di'z地址
- 下一篇: C++ 11 笔记 (四) : std: