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

  • 相关阅读:
    使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境
    MVC中使用SignalR打造酷炫实用的即时通讯功能(轉載)
    动软软件 生成 实体类模板(EnterpriseFrameWork框架)
    MVC+Ninject+三层架构+代码生成 总结(一、數據庫)
    MVC+Ninject+三层架构+代码生成 总结(三、實體類)
    1.0EnterpriseFrameWork 框架学习
    Excel操作类
    MVC+Ninject+三层架构+代码生成 总结(二、建項目)
    软件添加注册功能
    MVC+Ninject+三层架构+代码生成 总结(五、Ninject)
  • 原文地址:https://www.cnblogs.com/luoguoqiang1985/p/3492008.html
Copyright © 2020-2023  润新知