使用Ali-Wax框架在iOS项目中调用和调试Lua脚本

一、Ali-Wax框架 Wax是一个用lua语言编写本地iPhoneapp的框架。Lua是一个简洁、轻量、可扩展的脚本语言,它的体积小、速度快,在大量的游戏中使用,以实现游戏的可配置和可更新。
Wax框架使用OC运行时将OC和Lua进行绑定。通过Wax,你可以在Lua里面使用任何Objective-C类即框架,这样一来就能在app不发布新版的情况下,通过远程下载脚本的方式修复线上app里的bug、甚至新增一些功能。
但Wax的作者多年前不再维护Wax框架,现在由阿里维护并对其做了一些增强
Ali-Wax:https://github.com/alibaba/wax.git
wax-lua 的语言优势:
(1)自动垃圾回收:再也不用使用alloc,retain和release;
(2)代码少:没有头文件,没有static类型、array常量、dictionary常量;
(3)能够使用任何一个framework,例如cocoa、UITouch、Fondation等,任何用oc写的framework,wax自动将其暴露给lua使用;
(4)超级简单的http请求: 和REST的web service一起交互使用;
(5)lua也有函数闭包,也就是所谓的blocks;
(6)lua有内置的Regex-like 模式匹配library;
相比原Wax框架:
(1)64位支持;
(2)线程安全;
(3)其他一些特性:
lua function 转化成 oc block,
在lua中调用oc block,
getting/setting 私有成员变量,
内置通用的C函数,
支持lua代码debug;
二、Ali-Wax的podfile集成 Ali-Wax可以通过pod集成到项目中,另外Ali-Wax框架中集成了lua的debug方案:mobdebug,位于wax/tools/mobdebug处,作者配置了Podspec,可以直接pod到你的调试工程中。
为了便于在wax框架上进行功能定制,可以fork到自己的github上
使用Ali-Wax框架在iOS项目中调用和调试Lua脚本
文章图片
podfile 三、Ali-Wax的使用 wax框架中已经给了一些例子,可以参考https://github.com/alibaba/wax/tree/master/examples
下面简单说下用法
新建一个demo工程,加两个button和一个label
使用Ali-Wax框架在iOS项目中调用和调试Lua脚本
文章图片
1.在AppDelegate的回调中加上wax_start()
使用Ali-Wax框架在iOS项目中调用和调试Lua脚本
文章图片
2.在项目中添加lua脚本。
在lua脚本中调用OC函数,方法名是一样的,只是格式略有不同。在lua中调用原本iOS程序中已有的同名oc方法,会覆盖掉原本。
添加一个ViewController.lua
使用Ali-Wax框架在iOS项目中调用和调试Lua脚本
文章图片
3.使用wax_runLuaFile执行脚本
使用Ali-Wax框架在iOS项目中调用和调试Lua脚本
文章图片
当点击执行脚本按钮时,会调用lua中的function
4.从网上下载lua脚本后需要重新wax_runLuaFile
四、Ali-Wax的luaDebug 作者通过编译luasocket源代码支持了lua代码的ios环境调试。调试平台为ZeroBraneStudio
1.首先下载lua环境和luasocket环境,详细操作见https://blog.csdn.net/chunleixiahe/article/details/40075561
2.再按照github上的步骤
download ZeroBraneStudio
run ZeroBraneStudio: double click zbstudio/ZeroBraneStudio or sh zbstudio.sh
import lua code: click the 6th button, choose your lua code's root directory
start debug server: click Project->Start Debugger Server.
run this code before you enter debug
使用Ali-Wax框架在iOS项目中调用和调试Lua脚本
文章图片
addrequire('mobdebug').start('YOUR_MAC_IP_ADDRESS')to your lua code. if you use simulator 'YOUR_MAC_IP_ADDRESS' can be empty
launch your app,when require('mobdebug').start() is invoked, ZeroBraneStudio's dock will become active, then you should add breakpoint.
3.运行APP就能在ZeroBraneStudio上调试lua代码。
【使用Ali-Wax框架在iOS项目中调用和调试Lua脚本】PS:貌似不能用于真机调试

    推荐阅读