IOS(越狱)下 U3D 游戏 C#-DLL 的代码热更新 是否可行?
最近在做 U3D 手游, 已经快要上线, 但发现 IOS 下游戏的代码热更新是一个大问题。
有人推荐使用 LUA, 它确实是一个办法, 但程序已经开发很多, 改为 LUA 代价太大, 暂不讨论。
所以想请教下:U3D 游戏在使用 C#-DLL 的前提下, 如何做到 IOS(越狱) 下的代码热更新。
本人以前没有 IOS 开发经验, 如果问题幼稚还希望多多体谅。
已经排除掉的方案:
方案1: 使用 LUA。
代码量很多, 改动代价太大, 会考虑, 但不在这里讨论了。
方案2: 使用 monotouch
不确定 U3D 是否支持 monotouch
以下是我目前得到的一些测试结果:
通过分析 U3D 生成的 XCODE 代码, 可以发现 U3D 使用 mono aot 来运行, 并通过 mono_aot_register_module 来注册各 mono_aot_module_<ASSEMBLY NAME>_info。
方案1: 能否让 mono 启用 jit ?
尝试过直接调用 mono_jit_init 系列函数, 但直接崩溃。 但不知道是方法不对, 还是不支持。
方案2: 能否把 mono_aot_module_<ASSEMBLY NAME>_info 放在 dylib 中, 主程序使用 dlopen 等载入该 dylib,然后注册信息?
下面是 mono_aot_register_module 的函数注释, 好像是说只支持 statically linked, 但没有测试过。
/*
* mono_aot_register_module:
*
* This should be called by embedding code to register AOT modules statically linked
* into the executable. AOT_INFO should be the value of the
* 'mono_aot_module_<ASSEMBLY_NAME>_info' global symbol from the AOT module.
*/
void
mono_aot_register_module (gpointer *aot_info)
方案3: 把所有 mono/u3d/dll 相关内容, 编译成 game.dylib, 主程序是一个空壳, 负责下载/启动 game.dylib。 该方案貌似可行, 但工作量好像很大, 对于 IOS 不熟悉的我来说, 有点稍微复杂。
由于对 IOS 不熟悉, 上述各种方案, 有可能是可行的, 但方法不对导致失败。
希望各位大神不惜赐教。