本专题将探讨iOS领域技术上的创新和技术趋势,将邀请一线互联网公司的嘉宾来分享他... 展开 >
戴铭,滴滴出行技术专家,热爱开源分享。@Swift 大会,第二届GMTC 大会讲师,会把技术的深入研究和工作的经验总结发在微博(@戴铭)和博客上。对软件架构、性能优化、算法、提高开发效率和编译相关技术有着浓厚的兴趣。
本专题将探讨iOS领域技术上的创新和技术趋势,将邀请一线互联网公司的嘉宾来分享他们创新技术的落地实践和思考。
随着移动开发团队的扩大和产品功能的增加,代码库也迅速变得臃肿,并带来一系列挑战。代码耦合、代码搜寻和重用变得更难、merge conflict变得更频繁、编译速度变慢、AB试验变得繁多。以上种种,都将导致开发效率大幅降低。Instagram iOS团队为此做了诸多努力,确保工程团队扩大的同时,能产生良好的协同效应。
演讲内容包括:
1、代码模块化解决方案:IGListKit + MVVM。
Instagram产品设计风格是大量的列表。
(1) 早期大量使用了iOS原生UITableView,方便极少数工程师进行快速开发。
(2) 随着列表变得复杂,Instagram开发并开源了IGListKit。
2、大规模AB试验:
AB实验是社交产品快速迭代以及有效测量的核心工具。当团队扩大后,试验数量和相互干扰增多。
(1) Instagram通过对实验组进行空间(用户组)和时间(先后)的分离,确保试验的独立有效性。
(2) 让工程师、产品经理、数据科学家、设计师等共同参与试验决策,防止出现实验结果解读的主观偏差。
3、加快编译速度:Buck + Focus + Focus Project + Phabricator
代码解耦重用了,试验相互分离了,更多工程师能方便地协作了,代码量也增长更快了。这个时候,编译速度就会变得越来越慢——XCode不是为大型代码库所设计的。
(1) Buck:通过并行编译和增量编译,加快编译速度。
(2) Focus:随着代码量进一步增加,Buck编译依然需要大量时间。Focus的解决思路是,在服务器端预先编译好大量组件,生成ipa时直接下载这些组件。工程师只需要专注少量组件的代码,实际操作中只需要编译这部分组件。
(3) Focus Project:每个团队可以定义自己常用的一系列组件,在编译速度和工程师可以快速打开的源代码之间获得平衡。
(4) Focus解决了编译速度的问题,但工程师通过XCode搜寻代码变得困难了。解决方案是采用Phabricator,代码上云,提供便捷的浏览器搜索、代码历史查看工具。
听众收益:
了解热门社交产品如何应对代码库由小到大的挑战,如何在代码量迅速增加时确保团队开发效率,并有效进行AB试验。
客户端函数响应式编程的开发方式已经被越来越多的开发者接受,MVVM架构也是行业内普遍认可的一种开发方式。本次演讲将给出一种基于自研框架EasyMVVM的iOS应用开发解决方案,结合我们团队从ReactiveCocoa吸取经验到EasyMVVM的创造过程,从结合业务并兼顾性能的角度如何考量进行逐一的回顾。重点探讨了如何降低响应式编程的门槛、MVVM业务范式、业务模块复用等技术问题,为iOS应用开发提供一种新的可借鉴思路。
演讲主要内容包括:
1. EasyReact和EasyMVVM项目背景
2. EasyReact技术重点
(1)面向对象设计
(2)图论传播结构
(3)数据双向同步
3. EasyMVVM架构重点
(1)MVVM分层理解浅析
(2)Data binding的重要性
(3)delegate模式向声明化的迁移
4. 业务模块化
(1)业务模块化的重要性
(2)纵向设计与横向扩展性考虑
(3)Rubik系统介绍
5. 业务范例和总结
听众收益:
提供一种新的基于面向对象设计的响应式编程思路,给与MVVM一套有效的范式约束供大家参考,分享我们在业务模块化的一些经验。
在 iOS 应用开发中,我们会遇到构建列表视图问题,特别是构建异构非复用、同构复用混杂列表场景。由此开源社区诞生了 Eureka、XLForm 等开源项目。终于我也忍不了在 dataSource 中配置各种异构 Cell,创建了 Flix 项目。本次演讲将介绍 Flix 诞生来源、设计理念、适用场景。重点探讨如何在列表视图中尽可能地复用代码和完善代码整体结构。
演讲内容主要包括:
1. 列表构建痛点和 Flix 解决目标
(1) 异构非复用列表
(2) Flix 预想目标
2. Flix 设计理念
(1) 非复用 Cell 构建
(2) 复用 Cell 构建
(3) 整合 Provider
3. 适用场景和总结
听众收益:
提供一种复杂列表构建的解决方案,并分享一些 Swift 上泛型、协议以及类型擦除的使用要点。