一种基于Lua的iOS客户端功能动态更新的方法技术

技术编号:10568501 阅读:238 留言:0更新日期:2014-10-22 18:40
本发明专利技术公开了一种基于Lua的iOS客户端功能动态更新的方法,包括以下步骤:A、将用Lua脚本语言编写的业务逻辑代码放置在服务端的指定位置,同时在服务端配置相关客户端App代码模块的版本号;B、客户端启动运行时,通过访问服务端、查询相关App代码模块的版本号,根据版本号下载需要更新的Lua脚本业务逻辑代码;C、当客户端执行到App代码模块时,通过LuaCAPI动态地加载已经下载好的Lua脚本业务逻辑代码,并通过已经集成到客户端程序中的Lua解析器和桥接器来解析执行所述Lua脚本业务逻辑代码,以达到动态更新的目的。

【技术实现步骤摘要】
-种基于Lua的iOS客户端功能动态更新的方法
本专利技术涉及i〇S客户端,尤其是。
技术介绍
对于一个已经上线苹果商店的App,当开发者需要对客户端进行更新时,最传统的 做法是将重新编译生成的完整的App提交到苹果商店,等待苹果商店的审核,当审核通过 后,用户可以重新下载安装App以达到更新的目的。 由于iOS平台限制了不允许以动态的方式加载由原生代码编译生成的可执行程 序,意味着开发者不可以以动态链接库的方式来组织App的软件架构,也就意味着不可以 通过单独更新动态链接库来完成对客户端App的更新。 如果采用传统的方式更新客户端,由于从提交给苹果商店审核到审核通过往往需 要耗费较长的等待时间,导致我们的更新版本不能迅速地传递到客户的移动设备上,用户 也需要重新下载安装整个客户端App。 -种与本专利技术相近的实现方案是基于Javascript脚本语言和内置于iOS的 WebKit框架的Web App,通过WebKit下载和解析执行Javascript脚本代码,同样可以达到 动态更新客户端功能的目的。 如果客户端是做成基于Javascript和WebKit的Web App的方式,更新客户端 不需要经过审核,非常便捷,用户也无需重新下载安装整个App,但Web App的运行依赖于 WebKit,受Javascript解析库的执行性能的影响,使得用户体验与原生App相比存在一定 差距。 名词解释: Lua :由标准C编写而成的脚本语言,在所有操作系统和平台上都可以编译,运行;Lua 是一种嵌入式脚本语言,即Lua不是可以单独运行的程序,在实际应用中,通过Lua提供的 C API完成C/C++代码两种语言之间的通信的; iOS :苹果移动设备操作系统; App :应用软件; JavaScript :是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。同时 也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML (标准通用标记语言的子集) 网页添加动态功能,比如响应用户的各种操作; WebKit是开源的Web浏览器引擎,苹果的Safari、谷歌的Chrome浏览器都是基于这 个框架来开发的。WebKit还支持移动设备和手机,包括iPhone和Android手机都是使用 WebKit做为浏览器的核心。
技术实现思路
针对上述缺点,本专利技术提出,既 可以达到客户端在无需提交审核的情况下及时更新的目的,用户也无需重新下载安装一次 App,同时能够保持良好的用户体验。 本专利技术采用的技术方案是: ,包括以下步骤: A、 将用Lua脚本语言编写的业务逻辑代码放置在服务端的指定位置,同时在服务端配 置相关客户端App代码模块的版本号; B、 客户端启动运行时,通过访问服务端、查询相关App代码模块的版本号,根据版本号 下载需要更新的Lua脚本业务逻辑代码; C、 当客户端执行到App代码模块时,通过Lua C API动态地加载已经下载好的Lua脚 本业务逻辑代码,并通过已经集成到客户端程序中的Lua解析器来解析执行所述Lua脚本 业务逻辑代码,以达到动态更新的目的。 作为本方案的进一步改进,其还包括一桥接器,该桥接器用于转换Lua解析器不 能解析的代码。 具体的,所述桥接器包括标识Ob ject-c类对象和实例对象的userdata结构,该结 构作为Lua中的userdata数据类型存在,该结构中存放着指向Object-C对象的指针和其 他标识信息,与对象相关的操作基本上在这个结构的基础上完成。 进一步的,所述桥接器将与Object-C对象对应的userdata结构以key-value对 的方式存放在两个映射表中,其中key为userdata结构中的Object-C对象的指针,value 为userdata结构。 所述两个映射表中,其中一个表是弱表,存储了在Lua层面创建的0bject-c对象 的弱引用;另一个表是用于保存在桥接器层面创建的Object-C对象,是一个强引用表。 其中,所述桥接器包括Object-C类对象的创建、为一个类注册新方法以及对方法 的调用。 进一步的,所述0bject-C类对象的创建包括:在Lua元函数中通过定义的类名称 字符串和〇bject-C的运行时API创建一个类,并构造 Lua可以识别的userdata类型的结 构,再将该userdata结构放入上述的两个映射表中。 上述为一个类注册新方法的过程为:通过Object-C的运行时API给一个类注册新 的方法,该运行时API为class_addMethod,该class_addMethod接收一个IMP类型的函数 指针,该函数指针指向这个新方法的实现。 所述方法调用的过程为:在桥接器的元方法index里将方法的调用作为一个闭包 压入Lua当前维护的堆栈中,在元方法newindex中进行方法的覆盖。 所述方法调用在闭包中是完成〇b ject-c层面的事情,先从Lua中获取当前调用的 方法的名称,由方法名称通过〇bject-C的运行时API_sel_getUid获取到已注册的方法名 称对应的方法标识-SEL,再根据方法标识由0bject-C层面的API生成NSMethodSignature 对象,然后由NSMethodSignature对象构造 NSInvocation对象,最后由NSInvocation对象 完成方法的调用。 本专利技术的有益效果: 本专利技术可以快速地迭代更新客户端,用户无需重新下载安装App,在大多数情况下,更 新脚本量不会很大,更新过程不会影响用户的使用体验,最重要是Lua脚本解析器具有优 秀的性能,使得客户端App能够保持良好的用户体验。 【附图说明】 下面结合附图对本专利技术的【具体实施方式】做进一步的说明。 图1是本专利技术的系统架构图; 图2是本专利技术的动态更新方法流程图。 【具体实施方式】 本技术方案基于以下技术基础: 1. Lua的设计理念是可以使它粘合其他的开发语言,它提供了一系列的Lua C API,根 据其规范,我们可以编写一系列的元函数,作为Lua与其他语言编写的应用程序的粘合代 码。 2. Object-C作为一种动态语言,提供了运行时丰富的API,提供了根据类名称来 动态反射类对象、根据方法名称来动态绑定方法等特性。 3. Object-C可以方便地于C混合编程,为粘合代码的编写提供支持。 如图1-图2所示,为本专利技术的一种基于Lua的iOS客户端功能动态更新的系统及 方法,该方法包括以下步骤: A、 将用Lua脚本语言编写的业务逻辑代码放置在服务端的指定位置,同时在服务端配 置相关客户端App代码模块的版本号; B、 客户端启动运行时,通过访问服务端、查询相关App代码模块的版本号,根据版本号 下载需要更新的Lua脚本业务逻辑代码; C、 当客户端执行到App代码模块时,通过Lua C API动态地加载已经下载好的Lua脚 本业务逻辑代码,并通过已经集成到客户端程序中的Lua解析器和桥接器来解析执行所述 Lua脚本业务逻辑代码,该桥接器用于转换Lua解析器不能解析的代码,以本文档来自技高网
...

【技术保护点】
一种基于Lua的iOS客户端功能动态更新的方法,其特征在于包括以下步骤:A、将用Lua脚本语言编写的业务逻辑代码放置在服务端的指定位置,同时在服务端配置相关客户端App代码模块的版本号;B、客户端启动运行时,通过访问服务端、查询相关App代码模块的版本号,根据版本号下载需要更新的Lua脚本业务逻辑代码;C、当客户端执行到App代码模块时,通过Lua C API动态地加载已经下载好的Lua脚本业务逻辑代码,并通过已经集成到客户端程序中的Lua解析器来解析执行所述Lua脚本业务逻辑代码,以达到动态更新的目的。

【技术特征摘要】
1. 一种基于Lua的iOS客户端功能动态更新的方法,其特征在于包括以下步骤: A、 将用Lua脚本语言编写的业务逻辑代码放置在服务端的指定位置,同时在服务端配 置相关客户端App代码模块的版本号; B、 客户端启动运行时,通过访问服务端、查询相关App代码模块的版本号,根据版本号 下载需要更新的Lua脚本业务逻辑代码; C、 当客户端执行到App代码模块时,通过Lua C API动态地加载已经下载好的Lua脚 本业务逻辑代码,并通过已经集成到客户端程序中的Lua解析器来解析执行所述Lua脚本 业务逻辑代码,以达到动态更新的目的。2. 根据权利要求1所述的一种基于Lua的iOS客户端功能动态更新的方法,其特征在 于:其还包括一桥接器,该桥接器用于转换Lua解析器不能解析的代码。3. 根据权利要求2所述的一种基于Lua的iOS客户端功能动态更新的方法,其特征在 于:所述桥接器包括标识〇bject-C类对象和实例对象的userdata结构,该结构作为Lua 中的userdata数据类型存在,该结构中存放着指向Ob ject-C对象的指针和其他标识信息, 与对象相关的操作基本上在这个结构的基础上完成。4. 根据权利要求3所述的一种基于Lua的iOS客户端功能动态更新的方法,其特征在 于:所述桥接器将与〇b ject-C对象对应的userdata结构以key-value对的方式存放在两 个映射表中,其中key为userdata结构中的Ob ject-C对象的指针,value为userdata结 构。5. 根据权利要求4所述的一种基于Lua的iOS客户端功能动态更新的方法,其特征在 于:所述两个映射表中,其中一个表是弱表,存储了在Lua层面创建的Object-C对象的弱 引用;另一个表是用于保存在桥接器层面创建的〇b ject-C对象,是一个强...

【专利技术属性】
技术研发人员:余敬龙
申请(专利权)人:广东能龙教育股份有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1