滴滴 iOS 动态化方案计划于 2017 年初开源

2016年12月20日

DynamicCocoa,是滴滴 App 架构组自研的 iOS 动态化方案,可以让现有的 Objective-C 代码转换生成中间代码(JS),下发后动态执行。滴滴客户端 App 架构团队表示正在积极准备相关事项,考虑于 2017 年初开源。

相比其他动态化方案,DynamicCocoa 优势在于:

  • 使用原生技术栈:使用者完全不用接触到 JS 或任何中间代码,保持原生的 Objective-C 开发、调试方式不变

  • 无需重写已有代码:已有 native 模块能很方便的变成动态化插件

  • 语法支持完备性高:支持绝大多数日常开发中用到的语法,不用担心这不支持那不支持

  • 支持 HotPatch改完 bug 后直接从源码打出 patch,一站式解决动态化和热修复需求


DynamicCocoa 能支持绝大部分日常使用的 Objective-C / C 语法,挑几个特殊的比如:

  • 完整的 Class 定义:interface、category、class extension、method、property,最重要的是支持完备的 ivar 定义,保持和 native 完全一致的实例内存结构

  • ARC:可以正确处理 strong、weak、unsafe_unretained 等对象的引用计数,对象的 ivar 也可以正确的释放

  • C 函数:支持 C 函数的定义与 C 函数的调用、内联函数的调用

  • 可变参数:支持 C 与 OC 的可变参数方法的调用,如 NSLog

  • struct:支持任意结构体的使用,无需额外处理

  • block:支持创建和调用任意参数类型的 block

  • 其他 OC 特性:如 @selector、@protocol、@encode、for..in 等

  • 其他 C 特性:支持使用宏、static 变量、全局变量,取地址等

举个栗子,你可以放心的使用下面的写法,并能被正确的动态执行:


资源支持

一个功能模块,除了代码外,资源也是必不可少的,DynamicCocoa 的动态 bundle 支持:

  • xib 和 storyboard

  • xcassets

  • 不放在 xcassets 里的图片资源

  • 其他资源文件

对于习惯于使用 IB 来开发 UI 的人来说,这将是一个很好的开发体验。

工具链支持

滴滴使用 ruby 开发了一套命令行工具( 类比为 xcodebuild ),大幅简化了配置开发环境、OC 代码转换、资源处理、打包的复杂度,它可以:

  • 解析 Xcode Project:读取工程编译选项,保持和 native 编译参数一致

  • 增量编译:缓存 JS 转换结果,只重新转换修改过的文件,大幅提高 build 速度

  • 链接:分析类依赖,将多个 JS 按依赖顺序合并,提高文件读取速度

  • 资源编译:编译用到的 xib、storyboard 和 xcassets

  • 打包:将 JS、资源等打包成 bundle

对于开发者来说,就像 pod 命令一样,所有操作都可以通过这个命令完成。

DynamicCocoa 带来的改变

DynamicCocoa 动态化技术给 App 开发带来了很大的想象空间:

  • 低成本的动态化:无需额外学习,无需重写代码,可以快速的将已有模块动态化

  • 协作方式:对于大团队,发布版本不必再彼此牵制

  • 功能快速迭代:无需经过审核和 App Store 发版,像 h5 一样随发随上

  • App 瘦身:native 只需要留好插件入口,实现由网络下发,减少 App 体积

  • AB Test:不必局限于 native 埋进去的 AB 功能 Test,发版后能动态下发各种 Test

相比跨端方案,也带来了一个新思路:iOS 和 Android 都保留 native 开发模式,用各自的方式将 native 代码直接动态化,保持各平台的差异性。

来源:DDApp

展开阅读全文
27 收藏
分享
加载中
精彩评论
大家可以了解一下deviceone技术,在动态组件化方案上走的很前了,跨android,ios,windows
2016-12-20 08:56
2
举报
最新评论 (11)
真的很好
2018-02-02 17:06
0
回复
举报
感谢滴滴开源!
2016-12-26 09:39
0
回复
举报

引用来自“554330833a”的评论

那android动态化有什么稳定的框架呢?
可以看看微信的动态化方案
2016-12-21 10:22
0
回复
举报
那android动态化有什么稳定的框架呢?
2016-12-20 13:55
0
回复
举报
赞滴滴团队
2016-12-20 13:50
0
回复
举报
我们期待看到滴滴的开源框架
2016-12-20 13:42
0
回复
举报
有什么坑没
2016-12-20 09:19
0
回复
举报
大家可以了解一下deviceone技术,在动态组件化方案上走的很前了,跨android,ios,windows
2016-12-20 08:56
2
回复
举报
更多评论
11 评论
27 收藏
分享
返回顶部
顶部