iOS 开发高手课
戴铭
前滴滴出行技术专家
42934 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
用户故事 (1讲)
iOS 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

43 | 剖析使 App 具有动态化和热更新能力的方案

能够解释执行针对iOS运行时特性定制的字节码指令
最大程度地提高动态化的执行效率
Cling解释器和OCS都是基于LLVM扩展实现的
LLVM IR是SSA形式的
LLVM IR通过优化器可以提高效率
GitHub上有一个基于LLVM的C++解释器
LLVM套件里面难道就没有提供一个解释器用来动态解释执行吗
OCS方案的优势
OCSVM解释执行OCScript指令
OCS方案自己实现了一个虚拟器OCSVM作为解释器
腾讯公司曾公布的OCS方案
需要解决语言差异的问题
避免了使用JavaScript开发不畅的问题
DynamicCocoa方案将Objective-C转换成JavaScript代码
配合iOS运行时提供的方法替换能力
提供了易用的原生语言接口
JavaScriptCore能够在App运行过程中解释执行脚本
动态化方案对大团队的意义会更加明显
动态化方案的选择取决于团队人员自身情况
自建解释器方案提高动态化的执行效率
代码转译方案更友好于原生开发者
JavaScriptCore方案更适合前端开发者
LLVM
自建解释器方案
代码转译方案
JavaScriptCore 解释器方案
具备了动态化就具备了热更新能力
在运行时动态执行程序的能力
小结
实现动态化的方案
实现动态化的需求
动态化的目的
热更新能力的初衷
iOS开发中的动态化和热更新方案
剖析使 App 具有动态化和热更新能力的方案

该思维导图由 AI 生成,仅供参考

你好,我是戴铭。今天,我来和你聊聊 iOS 开发中的动态化和热更新方案。
热更新能力的初衷是,能够及时修复线上问题,减少 Bug 对用户的伤害。而动态化的目的,除了修复线上问题外,还要能够灵活更新 App 版本。
要实现动态化,就需要具备在运行时动态执行程序的能力。同时,实现了动态化,也就具备了热更新能力。通常情况下,实现动态化的方案有三种,分别是 JavaScriptCore 解释器方案、代码转译方案、自建解释器方案。接下来,我就和你详细说说这三种方案。

JavaScriptCore 解释器方案

iOS 系统内置的 JavaScriptCore,是能够在 App 运行过程中解释执行脚本的解释器。
JavaScriptCore 提供了易用的原生语言接口,配合 iOS 运行时提供的方法替换能力,出现了使用 JavaScript 语言修复线上问题的 JSPatch,以及把 JavaScriptCore 作为前端和原生桥梁的 React NativeWeex开发框架。这些库,让 App 具有了动态化能力。
但是,对于原生开发者来说,只能解释执行 JavaScript 语言的解释器 JSPatch、React Native 等,我们用起来不是很顺手,还是更喜欢用原生语言来开发。那么,有没有办法能够解决语言栈的问题呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

iOS开发中的动态化和热更新方案是备受关注的技术话题。本文深入探讨了动态化和热更新的初衷,以及实现动态化的三种方案:JavaScriptCore 解释器方案、代码转译方案、自建解释器方案。其中,JavaScriptCore 提供了在App运行过程中解释执行脚本的能力,而代码转译方案则将Objective-C转换成JavaScript代码,实现了原生开发者使用原生语言进行开发和调试的便利。文章还提到了语言转译的工具和实现过程,为读者提供了深入了解的途径。此外,还介绍了腾讯公司的自建解释器方案和基于LLVM的C++解释器,以及如何实现自制JIT的方法。总的来说,本文通过对动态化和热更新方案的剖析,为iOS开发者提供了丰富的技术思路和实现方法。文章还强调了动态化方案的选择对团队人员情况和业务需求的影响,以及动态化方案对大团队的意义。整体而言,本文为读者提供了全面的动态化和热更新方案的概览,为技术开发者提供了宝贵的参考和思路。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • 提手罢火兰
    是不是结课了 ?

    编辑回复: 是的,周六就更新结束语了。但结束后,老师也会继续关注专栏,可能会再写些加餐文章,欢迎你继续关注哦

    2019-06-20
    2
    5
  • Given
    老师,结束课程了以后怎么通过其他方式联系你,继续向你学习?

    作者回复: 可以关注我微博(@戴铭)和博客(https://ming1016.github.io)

    2019-06-21
    3
  • AI
    我想问下作者,现在的热更新方案都是什么呢,swift选择的又是什么呢

    作者回复: 很多都是自建

    2019-06-25
    1
  • Jeffrey
    吹了2年了 都没有见过DynamicCocoa长啥样 什么时候准备开源
    2019-06-20
    1
    34
  • 方金峰
    我们之前的热更新方案是:将下发的原生代码,通过自己实现的代码解析引擎,将代码转换为AST树,然后存储在相关的模型里面,在通过一个上下文注入到runtime里面,当runtime回调到当前函数的时候,上下文从存储的相关模型取出各个参数,然后放到当前堆栈里面去执行相关的逻辑,执行问之后,在返回之前调用的地方,这里跟腾讯的OCS有点像.
    2019-07-02
    1
    15
  • 时光念你
    https://github.com/YPLiang19/Mango, 不知道是哪位大神写的语法类似OC的DSL,支持热更新.
    2019-09-01
    8
  • 冯选刚
    现在使用jspatch会被苹果剧拒么
    2019-06-21
    6
  • Dean
    Daynamic cocoasdk不会开源了,只是滴滴自己内部在用,如果开源,被广泛应用可能会被苹果盯上,而导致滴滴都不能用了
    2019-07-01
    4
  • 卓小土
    “只不过,ExecutionEngine 里的 Interpreter,是专门用来解释 LLVM IR 的,缺少对 Objective-C 语法特性的支持,所以无法直接使用。” ———————- 没太懂。对于动态化方案来说,为啥非得要直接解释oc呢,把oc编译成ir,将ir下发给llvm解释器lli执行不就够了吗?
    2019-06-26
    1
    1
  • 抛到银河
    依稀记得孙源当时公布的开源计划,可惜被苹果打断了
    2019-06-26
    1
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部