FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

Airbnb 的三阶段 SwiftUI 迁移实践

  • 2023-10-13
    北京
  • 本文字数:1037 字

    阅读完需:约 3 分钟

大小:566.13K时长:03:13
Airbnb的三阶段SwiftUI迁移实践

从 2022 年开始,Airbnb 的 iOS 团队就认为SwiftUI已经足够成熟,可以在他们的官方应用中使用它。但 Airbnb 的工程师 Bryn Bodayle 表示,这需要一个谨慎的转换过程。


Airbnb 的工程师认为,SwiftUI 的主要优势是它的灵活性和可组合性、声明性、简洁性和惯用性,他们希望这些优势可以改进开发者体验,同时不会在用户体验方面有所损失。


为了尽可能实现无缝的过渡,他们制定了一个三阶段计划。在第一阶段,他们基于现有的设计系统构建一系列可重用的组件。在第二阶段,他们对基本组件进行组合,构建出整个屏幕。在第三个也是最后一个阶段,屏幕将被组合成完整的功能。


在开始前两个阶段之前,Airbnb 的一群自愿者工程师先进行小型试点,并收集反馈,尽早改进他们的基础设施。


如上所述,第一步是基于一系列风格使用 SwiftUI 重建现有的设计系统,这些风格可以通过修饰符实例化并传给视图。这为开发人员使用几行代码轻松定制 UI 组件提供了基础。


第二步是构建基础设施,实现基于 UIKit 的 Epoxy 视图和 SwiftUI 视图之间的双向桥接。桥接的实现细节可以在原文中找到。简单地说,桥接是基于UIHostingViewController(将 SwiftUI 层次结构嵌入到视图控制器)和UIViewRepresentable(将 UIKit 视图集成到 SwiftUI 层次结构)。


Airbnb 工程师做出的另一个决定是将 Epoxy 的单向数据流应用到 SwiftUI,将ObservableOject作为状态类的基础,在每次状态变化时触发 SwiftUI 重新渲染。


我们发现,工程师们更喜欢继续使用这种方法来构建屏幕,因为这样可以让业务和状态修改逻辑与表示逻辑分开。


可测试性在 Airbnb 有比较高的优先级。他们的新 SwiftUI 实现需要能够很好地适应他们的快照测试方法。为此,他们为每个定义的视图变体起了一个名字,以便与他们的快照测试服务一起使用,并让所有视图变体遵循 Xcode 的PreviewProvider协议,以便使用 Xcode 预览。此外,为了支持行为风格测试,他们集成了ViewInspector。ViewInspector 允许在运行时遍历视图层次结构,并可直接访问底层“视图”结构体,从而使内部状态变得可检查,并可以编程的方式模拟用户交互。


Bodayle 解释说,与 UIKit 实现相比,现在的代码量大约减少到原来的六分之一,而且没有出现与 SwiftUI 响应性相关的性能损失,除了实例化UIHostingController时的一点开销。


关于 Airbnb 采用 SwiftUI,这里无法全部概述,所以请不要错过原文的内容和一些有用的代码片段。


原文链接

https://www.infoq.com/news/2023/10/airbnb-transitioning-swiftui/


相关阅读:

加速机器学习模型开发:AirBnb 利用 Chronon 实现特征工程

如何实现 SwiftUI 微服务?

2023-10-13 08:005901

评论

发布
暂无评论
发现更多内容

反脆弱漫谈

木风

质量管理 技术管理 28天写作

架构实战总结

Geek_fc100d

「架构实战营」

微服务架构细节

卢卡多多

28天写作 12月日更

云原生:详解|容器核心技术解析

息之

Docker 镜像 技术优势

Mysql探索(一):B-Tree索引

程序员历小冰

MySQL 索引 28天写作

工业区块链与关键关联技术融合创新

CECBC

继续跑步

wood

创业 跑步

模块五作业

ks

架构实战营

TypeScript 之常见类型(上)

冴羽

JavaScript typescript 翻译 大前端

[架构实战营] 模块五作业

张祥

架构实战营

模块九作业

Geek_fc100d

「架构实战营」

高层与基层思考上的差异与解决办法

光环PMO社群

项目管理

和12岁小同志搞创客开发:手撕代码,做一款节拍电子鼓

不脱发的程序猿

少儿编程 DIY 智能硬件 创客开发 Arduino

31 K8S之StatefulSet控制器

穿过生命散发芬芳

k8s 28天写作 12月日更

在AI与信息交互之间:QQ 浏览器的边界探索

脑极体

基于云的技术架构设计实践-第0篇

hackstoic

云计算 架构 云原生 创业公司 签约计划第二季

王者荣耀商城异地多活架构设计

胡颖

架构实战营

不要再给我发Helvetica字体的文件了!

IT蜗壳-Tango

28天写作 12月日更

微博系统中“微博评论”的高可用高性能架构

AHUI

「架构实战营」

新公司安排的工作做不来怎么办?是不是该离职了?

石云升

28天写作 职场经验 12月日更

浪潮云说直播间-云溪数据库之ClickHouse原理解析今晚开讲

浪潮云

云计算,

云原生:详解|容器云平台应用解析

息之

容器安全 容器应用

10个问题解答火热的元宇宙概念

CECBC

毕业设计-电商秒杀系统

小智

「架构实战营」

Java基础系列:反射

正向成长

Java 反射

由《组织行为学》讲义想到的两个问题(1/28)

赵新龙

TGO鲲鹏会 28天写作

Python Qt GUI设计:QCalendar日历类和QDateTimeEdit时间类(基础篇—20)

不脱发的程序猿

Python qt GUI设计 QCalendar日历类 QDateTimeEdit时间类

Java问题排查分享

捉虫大师

Java 问题排查

Java 项目中使用 Resilience4j 框架实现隔断机制/断路器

码语者

Java circuit break 断路器 Resilience4j 隔断机制

深度参与,亲身体验,谨慎接受

mtfelix

28天写作 必然 未来趋势 2022开年学习

模块五作业 ”微博评论“的高性能高可用计算架构

小朱

架构实战营

  • 扫码添加小助手
    领取最新资料包
Airbnb的三阶段SwiftUI迁移实践_Android/iOS_Sergio De Simone_InfoQ精选文章