iOS 程序插件及功能动态更新思路

  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,再导入到我们的程序中。

转:http://blog.csdn.net/wssand44/article/details/8288178

iOS 程序插件及功能动态更新思路

时间: 2024-12-26 20:29:20

iOS 程序插件及功能动态更新思路的相关文章

antd Select进阶功能 动态更新、函数防抖

一.动态更新Options Antd Select自带的搜索功能很多时候需要结合后端的接口,输入一个关键字的时候会自动更新选择器的选项. 下面列一些注意点 基础实现 选择器选项必须和每次更新的数据挂钩, 这个值可以通过state,也可以通过props拿到 再结合循环的方法例如map遍历渲染options import React, { PureComponent, Fragment } from 'react' import { Select } from 'antd' import axios

【转】iOS程序自动检测更新的实现 -- 思路不错

原文网址:http://blog.csdn.net/davidsph/article/details/8931718 之前项目需要用到app自动更新的功能,现将实现方案分享出来.iOS程序自动提示更新的实现方案大致分为两种:第一种,自己服务器提供一个接口,告知相关app的当前版本,是否需要更新,以及更新的地址等信息 .第二种,就是利用苹果的appstore 提供的相关api进行查询更新. 由于此前没有找到iOS程序更新的方法,就用了第一种方式,但后来发现了一些问题,自己提供服务器,需要维护,程序

JSPatch – 动态更新iOS APP

博文转载至 http://blog.cnbang.net/works/2767/ JSPatch是最近业余做的项目,只需在项目中引入极小的引擎,就可以使用JavaScript调用任何Objective-C的原生接口,获得脚本语言的能力:动态更新APP,替换项目原生代码修复bug. 用途 是否有过这样的经历:新版本上线后发现有个严重的bug,可能会导致crash率激增,可能会使网络请求无法发出,这时能做的只是赶紧修复bug然后提交等待漫长的AppStore审核,再盼望用户快点升级,付出巨大的人力和

iOS 动态更新

iOS 动态更新 App 动态更新 1.控件到 window 的层级关系: 2.分析控件的详细路径: 3.动态修改控件: 4.工具篇: 视图的层级关系: 每个 App , 至少有一个根 Window , 通常情况下我们只用一个 .window 有一个 rootViewController , 这就是我们所谓的根视图 , 我们所有的控制器都是放在 rootViewController 里面的. 这个是最简单的层级关系 如果在项目里有了这么一个路径 , 我们可以做什么呢? 在当项目很复杂 , 可以其

IOS-使用framework实现功能模块动态更新

测试Xcode版本为6.1.1 实现过程简述:把想要的作为动态更新的模块,移动到我们创建的Framework工程中,然后得到我们想要的动态库文件,把此文件再通过iTunes放到"主程序"项目的document文件夹下,从而实现从主程序中去加载此动态库,从而实现功能模块的动态更新效果.理想效果为支付宝APP,而支付宝采用的是HTML5(网页)的形式实现的,这是目前最通用的实现方式,但是不适用于复杂界面效果. 第一步:创建IOS Framework工程 第二步:生成的工程中原本的类删掉不用

cocos2d-js 在线更新代码脚本 动态更新脚本程序 热更新

一.cocos2d-js 动态更新的基本思路 动态更新的好处不言而喻,不需要重新上架审核,能节省很多时间,也能让用户尽快使用上最新的版本,减少下载的成本. 官方BETA版本后提供了AssetsManager类,可以完成动态更新的步骤,说明:https://github.com/chukong/cocos-docs/blob/master/manual/framework/html5/v3/assets-manager/zh.md cocos2d程序安装后,以Android为例,程序存在于2个地方

iOS程序自动检测更新的实现

本文转载至 http://blog.csdn.net/davidsph/article/details/8931718 App Store自动更新itunes 之前项目需要用到app自动更新的功能,现将实现方案分享出来.iOS程序自动提示更新的实现方案大致分为两种:第一种,自己服务器提供一个接口,告知相关app的当前版本,是否需要更新,以及更新的地址等信息 .第二种,就是利用苹果的appstore 提供的相关api进行查询更新. 由于此前没有找到iOS程序更新的方法,就用了第一种方式,但后来发现

iOS程序框架设计之皮肤切换功能 (白天与夜间效果)

iOS程序框架设计之皮肤切换功能 一.引言 移动应用的开发中,有时我们会需要例如更换皮肤此类的功能,andorid采用xml配置UI的方式,这个问题或许还容易解决些,iOS的主要UI逻辑则是在代码中控制的,如果没有一个强大的框架方案,这个问题将变得非常棘手.网上也有很多诸如此类功能的优秀案例与框架,在这篇博客中,我与大家分享下我的解决方案,其中如果有不恰或者糟糕之处,希望与高人一起交流. 二.设计思路与框架 首先我的设计思路是采用通知的方式,原理可以如下理解为以下几步: 1.在系统的通知中心注册

如何面试一个1-3年的 iOS 程序员(持续更新)

如何面试一个1-3年的 iOS 程序员(持续更新) 计算机基础类 请说一说 HTTP 1.0 和 1.1之间的区别(懵逼题)这是一道计算机类别的题, 具体区别可以单独写一篇博客了, 但是一般情况下, 最主要的区别还是指1.1中支持长连接. 1.0规定的是浏览器只能与服务器保持短连接, 浏览器的每次请求都需要跟服务器建立一次 TCP 连接, 请求处理完以后就立即断开 TCP 连接, 服务器不跟踪每个客户也不记录过去的请求. 具体可以看这篇博客 请说一说长连接和短连接的区别这个和面试官讨论了一下,