使用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脚本_第1张图片
podfile

三、Ali-Wax的使用

wax框架中已经给了一些例子,可以参考https://github.com/alibaba/wax/tree/master/examples

下面简单说下用法

新建一个demo工程,加两个button和一个label

使用Ali-Wax框架在iOS项目中调用和调试Lua脚本_第2张图片

1.在AppDelegate的回调中加上wax_start()

使用Ali-Wax框架在iOS项目中调用和调试Lua脚本_第3张图片

2.在项目中添加lua脚本。

在lua脚本中调用OC函数,方法名是一样的,只是格式略有不同。在lua中调用原本iOS程序中已有的同名oc方法,会覆盖掉原本。

添加一个ViewController.lua

使用Ali-Wax框架在iOS项目中调用和调试Lua脚本_第4张图片

3.使用wax_runLuaFile执行脚本

使用Ali-Wax框架在iOS项目中调用和调试Lua脚本_第5张图片

当点击执行脚本按钮时,会调用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

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代码。

PS:貌似不能用于真机调试

你可能感兴趣的:(使用Ali-Wax框架在iOS项目中调用和调试Lua脚本)