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脚本来执行。
思路很简单,不知道自己说清楚了没有,下面我把自己写的例子贴上来,与大家交流一下
服务端的程序,点击HttpStaticFileServer启动服务器,这个程序是Netty的示例,在这足够用了,未作修改,TestController.lua是服务端要返回给客户端的脚本。
客户端程序,主要是RootViewController中与Lua交互,在此类中设置服务器的地址及对应端口
程序运行效果如下图:
示例程序下载路径: http://download.csdn.net/detail/wssand44/4878972
http://download.csdn.net/detail/wssand44/6740495(服务端用的python,较版本一,server 易部署)
因为苹果沙箱机制,我们程序无法再安装后访问资源包目录,所以从官网下载的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 程序插件及功能动态更新思路相关推荐

  1. IOS 程序插件及功能动态更新思路┊

    http://www.cocoachina.com/bbs/read.php?tid=129723&keyword=%B2%E5%BC%FE 带图片版 CSDN路径-- http://blog ...

  2. ATS插件中配置文件自动更新思路

    在ATS插件开发过程中,我们经常会需要如下业务需求: 某个插件的配置文件更新了,我们需要让新的配置文件生效,但是我们不想重启ATS.因为作为CDN行业的缓存服务器来说,很大部分缓存是直接使用内存存放的 ...

  3. Consul作为配置中心,配置Asp.Net Core应用程序 依据key/value动态更新

    Consul作为配置中心,配置Asp.Net Core应用程序 依据key/value自动更新 https://github.com/wintoncode/Winton.Extensions.Conf ...

  4. iOS使用lua语言的使用步骤与实现插件的动态更新

    一:lua使用步骤:(可参考http://www.duote.com/tech/ios/19919_2.html#contentbody) 用Xcode创建项目 我们先创建一个新项目 通过Finder ...

  5. iOS之深入解析如何构建动态库与framework动态更新

    一.动态库的构建步骤 ① 创建动态库 创建一个动态库 MyDynamicFramework: 创建一个测试类: 在 MyDynamicFramework.h(默认生成,可统一暴露头文件) 中 #imp ...

  6. JSPatch – 动态更新iOS APP

    JSPatch是最近业余做的小项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的原生接口,获得脚本语言的能力:动态更新APP,替换项目原生代码修复bug. ...

  7. Ios热更新,实时代码更新,动态更新,动态库framework

    动态更新,iOS有三种处理方案 1,开源框架reactive native,但是编程语言是js iOS app可以在运行时从服务器拉去最新的js文件到本读,然后执行,因为js是一门动态的脚本语言 所以 ...

  8. 手机腾讯视频android版插件,小程序1.6.5版更新,终于支持腾讯视频插件了

    微慕小程序1.6.5版更新说明如下: 新增的功能 1.调整海报功能(adapter.js ,detail.js) 考虑到以前的海报生成有些变形,也容易导致失败,此次更新对海报的程序做了较大的调整,并做 ...

  9. SNS中好友动态功能的设计思路

    现在大部分SNS网站都有一个功能,就是显示好友的活动状态,比如你的好友上传了一张照片.分享了一篇文章等等动作,都可以显示在你的页面里,这样大大增强了社区的互动性,也成为现在SNS网站的主要特征,对于这 ...

最新文章

  1. Python零碎知识(11):assert用法
  2. python怎么实现检验_[python skill]利用python实现假设性检验方法
  3. jquery和zepto的扩展方法extend
  4. 2、SQL UNION 和 UNION ALL 操作符
  5. python集合类型中的元素是有序的_python基础篇:很有意思的数据类型,集合(set) 常用去去重...
  6. 视频工作者应该知道的几个网站
  7. 为什么div设置其border无效?
  8. Ubuntu 16.04 安装Matlab R2015b
  9. ztree 加搜索框_zTree添加搜索
  10. Windows自带工具提取颜色得到十六进制颜色码
  11. UML图:用例图详细介绍
  12. 搜索引擎使用的10个技巧
  13. NepCTF2022 Writeup
  14. 消息中间件之二:kafka详解
  15. Occupancy Flow: 4D Reconstruction by Learning Particle Dynamics(1)
  16. 【附源码】计算机毕业设计java在线学习系统设计与实现
  17. 前沿人物(零)——伯特霍尔德霍恩
  18. 什么是函数指针?(理解及使用)
  19. 赔1100万美元!谷歌招聘年龄歧视
  20. Qt编写安防视频监控系统42-用户权限

热门文章

  1. P4921 情侣?给我烧了!
  2. hdu 4921 Map(组合计数)
  3. 设计模式-cookie
  4. 【计算机网络复习之路】物理层 (多图详解)
  5. am最新版安装包_民生证券民app安卓版-民生证券am版下载2.90.0 官方版-西西软件下载...
  6. 初学者linux软件下载,linux爱好者入门教程
  7. Canal同步mysql binlog至pulsar
  8. 梦幻西游109散人最多的服务器,梦幻西游:2021年,109散人最多的服务器TOP5,2008只能排第四。...
  9. linux 添加163源,CentOS yum 源设置为163的源操作步骤及配置文件参考
  10. 颜色提取工具,一键颜色值复制工具