43 | 剖析使 App 具有动态化和热更新能力的方案
戴铭
该思维导图由 AI 生成,仅供参考
你好,我是戴铭。今天,我来和你聊聊 iOS 开发中的动态化和热更新方案。
热更新能力的初衷是,能够及时修复线上问题,减少 Bug 对用户的伤害。而动态化的目的,除了修复线上问题外,还要能够灵活更新 App 版本。
要实现动态化,就需要具备在运行时动态执行程序的能力。同时,实现了动态化,也就具备了热更新能力。通常情况下,实现动态化的方案有三种,分别是 JavaScriptCore 解释器方案、代码转译方案、自建解释器方案。接下来,我就和你详细说说这三种方案。
JavaScriptCore 解释器方案
iOS 系统内置的 JavaScriptCore,是能够在 App 运行过程中解释执行脚本的解释器。
JavaScriptCore 提供了易用的原生语言接口,配合 iOS 运行时提供的方法替换能力,出现了使用 JavaScript 语言修复线上问题的 JSPatch,以及把 JavaScriptCore 作为前端和原生桥梁的 React Native 和 Weex开发框架。这些库,让 App 具有了动态化能力。
但是,对于原生开发者来说,只能解释执行 JavaScript 语言的解释器 JSPatch、React Native 等,我们用起来不是很顺手,还是更喜欢用原生语言来开发。那么,有没有办法能够解决语言栈的问题呢?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
iOS开发中的动态化和热更新方案是备受关注的技术话题。本文深入探讨了动态化和热更新的初衷,以及实现动态化的三种方案:JavaScriptCore 解释器方案、代码转译方案、自建解释器方案。其中,JavaScriptCore 提供了在App运行过程中解释执行脚本的能力,而代码转译方案则将Objective-C转换成JavaScript代码,实现了原生开发者使用原生语言进行开发和调试的便利。文章还提到了语言转译的工具和实现过程,为读者提供了深入了解的途径。此外,还介绍了腾讯公司的自建解释器方案和基于LLVM的C++解释器,以及如何实现自制JIT的方法。总的来说,本文通过对动态化和热更新方案的剖析,为iOS开发者提供了丰富的技术思路和实现方法。文章还强调了动态化方案的选择对团队人员情况和业务需求的影响,以及动态化方案对大团队的意义。整体而言,本文为读者提供了全面的动态化和热更新方案的概览,为技术开发者提供了宝贵的参考和思路。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》,新⼈⾸单¥59
《iOS 开发高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(15)
- 最新
- 精选
- 提手罢火兰是不是结课了 ?
编辑回复: 是的,周六就更新结束语了。但结束后,老师也会继续关注专栏,可能会再写些加餐文章,欢迎你继续关注哦
2019-06-2025 - Given老师,结束课程了以后怎么通过其他方式联系你,继续向你学习?
作者回复: 可以关注我微博(@戴铭)和博客(https://ming1016.github.io)
2019-06-213 - AI我想问下作者,现在的热更新方案都是什么呢,swift选择的又是什么呢
作者回复: 很多都是自建
2019-06-251 - Jeffrey吹了2年了 都没有见过DynamicCocoa长啥样 什么时候准备开源2019-06-20134
- 方金峰我们之前的热更新方案是:将下发的原生代码,通过自己实现的代码解析引擎,将代码转换为AST树,然后存储在相关的模型里面,在通过一个上下文注入到runtime里面,当runtime回调到当前函数的时候,上下文从存储的相关模型取出各个参数,然后放到当前堆栈里面去执行相关的逻辑,执行问之后,在返回之前调用的地方,这里跟腾讯的OCS有点像.2019-07-02115
- 时光念你https://github.com/YPLiang19/Mango, 不知道是哪位大神写的语法类似OC的DSL,支持热更新.2019-09-018
- 冯选刚现在使用jspatch会被苹果剧拒么2019-06-216
- DeanDaynamic cocoasdk不会开源了,只是滴滴自己内部在用,如果开源,被广泛应用可能会被苹果盯上,而导致滴滴都不能用了2019-07-014
- 卓小土“只不过,ExecutionEngine 里的 Interpreter,是专门用来解释 LLVM IR 的,缺少对 Objective-C 语法特性的支持,所以无法直接使用。” ———————- 没太懂。对于动态化方案来说,为啥非得要直接解释oc呢,把oc编译成ir,将ir下发给llvm解释器lli执行不就够了吗?2019-06-2611
- 抛到银河依稀记得孙源当时公布的开源计划,可惜被苹果打断了2019-06-261
收起评论