1. 所用框架及语言 IOS客户端-Wax(开发愤怒的小鸟的连接Lua 和 Objc的框架),Lua,Objc, 服务端-Java(用于返回插件页面)
  2. 工具框架链接地址: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脚本来执行。






思路很简单,不知道自己说清楚了没有,下面我把自己写的例子贴上来,与大家交流一下





ios辅助脚本开发工具 ios脚本插件_lua

服务端的程序,点击HttpStaticFileServer启动服务器,这个程序是Netty的示例,在这足够用了,未作修改,TestController.lua是服务端要返回给客户端的脚本。


ios辅助脚本开发工具 ios脚本插件_ios辅助脚本开发工具_02

客户端程序,主要是RootViewController中与Lua交互,在此类中设置服务器的地址及对应端口



程序运行效果如下图:



ios辅助脚本开发工具 ios脚本插件_ios辅助脚本开发工具_03

ios辅助脚本开发工具 ios脚本插件_Lua_04

ios辅助脚本开发工具 ios脚本插件_lua_05

ios辅助脚本开发工具 ios脚本插件_ios辅助脚本开发工具_06




示例程序下载路径:



因为苹果沙箱机制,我们程序无法再安装后访问资源包目录,所以从官网下载的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,再导入到我们的程序中。


http://www.cocoachina.com/bbs/read.php?tid=129723&keyword=%B2%E5%BC%FE