系统设计 - IOS 程序插件及功能动态更新思路
所用框架及语言 IOS客户端-Wax(开发愤怒的小鸟的连接Lua 和 Objc的框架),Lua,Objc, 服务端-Java(用于返回插件页面)
由
于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脚本来执行。
思路很简单,不知道自己说清楚了没有,下面我把自己写的例子贴上来,与大家交流一下
因为苹果沙箱机制,我们程序无法再安装后访问资源包目录,所以从官网下载的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,再导入到我们的程序中。
系统设计 - IOS 程序插件及功能动态更新思路的更多相关文章
- iOS 程序插件及功能动态更新思路
所用框架及语言 iOS客户端-Wax(开发愤怒的小鸟的连接Lua 和 Objc的框架),Lua,Objc, 服务端-Java(用于返回插件页面) 工具框架链接地址:Wax - https://gith ...
- antd Select进阶功能 动态更新、函数防抖
一.动态更新Options Antd Select自带的搜索功能很多时候需要结合后端的接口,输入一个关键字的时候会自动更新选择器的选项. 下面列一些注意点 基础实现 选择器选项必须和每次更新的数据挂钩 ...
- elasticsearch同义词及动态更新
第一种:参考地址:http://dev.paperlesspost.com/setting-up-elasticsearch-synonyms/271.Add a synonyms file.2.Cr ...
- JSPatch – 动态更新iOS APP
原文:http://blog.cnbang.net/works/2767/ JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的 ...
- IOS App动态更新
框架 JSPatch WaxPatch react-native 方案对比 目前已经有一些方案可以实现动态打补丁,例如WaxPatch,可以用Lua调用OC方法,相对于WaxPatch,JSPat ...
- Red Gate系列之五 .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程
原文:Red Gate系列之五 .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程 Red Gate ...
- cocos2d-js 在线更新代码脚本 动态更新脚本程序 热更新 绕过平台审核 不需重新上架
2014年8月15日补充 cocos2d-js 3.0 rc0 的AssetsManager有缺陷,有一些注意点:(可以阅读源代码发现) 1.旧manifest中有,但新manifest中没有的文件( ...
- iOS程序自动检测更新的实现
本文转载至 http://blog.csdn.net/davidsph/article/details/8931718 App Store自动更新itunes 之前项目需要用到app自动更 ...
- 【转】iOS程序自动检测更新的实现 -- 思路不错
原文网址:http://blog.csdn.net/davidsph/article/details/8931718 之前项目需要用到app自动更新的功能,现将实现方案分享出来.iOS程序自动提示更新 ...
随机推荐
- Parallels Desktop 7用bootcamp安装win7 后如何激活WIN7
在parallels的选项中,在硬件选项卡的引导标记中添加:kernel.waet.enable=0 ,重新启动win7即可激活.
- HDOJ/HDU 1029 Ignatius and the Princess IV(简单DP,排序)
此题无法用JavaAC,不相信的可以去HD1029题试下! Problem Description "OK, you are not too bad, em- But you can nev ...
- java NIO 资料总结
1.http://developer.51cto.com/art/201204/328340.htm 2.http://ifeve.com/file-channel/并发编程网系列 3 http:// ...
- [转]Angular, Backbone, or Ember: Which is Best for your Build?
In order to choose which framework is right for your build, we've asked four important questions of ...
- openSuSE12.1 zypper LAMP
LAMP是由Apache MySQL PHP组成的,是在Linux下最受欢迎的软件组合之一,目前互联网上有很多网站运行在LAMP服务器上. Linux - 是富有情味的开源操作系统:Apache - ...
- SignalR及时通知功能
功能需求,现时已经编写了一个hub能够,将后台的消息发送至前台中,并给出提示,但如后台已经发生了变化,由内部调用消息时,应该怎样处理? 1.编写Hub类 using System.Collection ...
- WPF ArrangeOverride与MeasureOverride
1.MeasureOverride 是FrameworkElement.MeasureOverride 方法 当重写在派生类中,单位是对于子元素所需要布局的大小并确定FrameworkElement ...
- jetty之嵌入式运行jetty
在文章什么是jetty中,提到jetty容器真正出名的地方是可以作为一个嵌入到java代码的servlet容器,即可以在java代码中实例化servlet对象并操作该对象.下面我们就先来学习 下如何把 ...
- maven项目文件乱码问题
今日碰到maven项目中的一个资源文件出现乱码,排查发现是在.setting文件夹下的org.eclipse.core.resources.prefs文件导致的. 修改前的编码规则如下: <sp ...
- WebService基于SoapHeader实现安全认证(一)
本文转载:http://www.cnblogs.com/houleixx/archive/2009/08/22/webservice-soapheader-security.html WebServi ...