Swift在Airbnb的应用实践
2020-02-27 227浏览
- 1.Swift在Airbnb的应⽤用实践 陈坤/Airbnb iOS⾼高级⼯工程师
- 2.新语⾔言(2014发布),安全编程模型为出发点,包含很多现代编程特性 苹果⼤大⼒力力⽀支持和推⼴广 Airbnb为什什么使⽤用Swift 和苹果建⽴立良好的关系 准备重写UI 可以直接调⽤用Objective-C的代码
- 3.时间轴 2015年年以前 纯Objective-C
- 4.时间轴 2015年年底 开始使⽤用Swift构建新UI 2015年年以前 纯Objective-C
- 5.时间轴 2015年年底 开始使⽤用Swift构建新UI 2015年年以前 纯Objective-C 2017年年1⽉月 Swift 2->3
- 6.时间轴 2015年年底 开始使⽤用Swift构建新UI 2015年年以前 纯Objective-C 2017年年5⽉月 ⽀支持Swift的BUCK构建系统 2017年年1⽉月 Swift 2->3
- 7.时间轴 2015年年底 开始使⽤用Swift构建新UI 2015年年以前 纯Objective-C 2017年年5⽉月 ⽀支持Swift的BUCK构建系统 2017年年1⽉月 Swift 2->3 现在 少量量Infra代码Objective-C
- 8.Swift的现状
- 9.3 Years, Version 4
- 10.Open Sourced, ~4,0000 Stars
- 11.增⻓长迅速 ____________________________ Alamofire RxSwift Kingsfisher SwiftyJSON ObjectMapper PromiseKit …
- 12.使⽤用Swift的公司 ____________________________ Airbnb Lyft Uber Linkedin Coursera IBM Vimeo
- 13.Swift的主要特性以及在Airbnb的应⽤用
- 14.安全
- 15.Objective-C Optional Variable
- 16.Swift Optional Variable T 和T?是完全不不同的两个类型
- 17.Wrap和Unwrap
- 18.let VS var Immutable is better than mutable
- 19.⾼高级枚举类型
- 20.Protocol Oriented Programming
- 21.范型
- 22.
- 23.
- 24.CarouselComponentCarouselComponentCarouselComponent
- 25.其它特性 ____________________________ Memory Management Less code Faster Tuples Access Control
- 26.Airbnb遇到的问题以及解决⽅方案
- 27.编译时间 Debug Build Release Build
- 28.类型推导以及类型检查
- 29.调试编译时间 OTHER_SWIFT_FLAGS:-Xfrontend -debug-time-function-bodies
- 30.调试编译时间 OTHER_SWIFT_FLAGS:-Xfrontend -debug-time-function-bodiesTool:BuildTimeAnalyzer-for-Xcode
- 31.调试编译时间 Before After
- 32.调试编译时间 Before After
- 33.其它例例⼦子 12⼩时 15秒
- 34.1. Use CI system to monitor the build time. 解决⽅方案 2. Educate engineers to provide type information as much as possible. 3. Use Lint to prevent engineers from common issues. 4. Offline type inference (Use SourceKit).
- 35.其它技巧
- 36.Split Libraries Airbnb⽬目前有70个左右的Libraries
- 37.⼤大量量缓存编译中间结果,CI编译时间⼤大幅降低 不不需要⼿手动管理理.xcodeproj⽂文件 BUCK编译系统 ⾼高级的依赖管理理 开源 Uber和Airbnb都已使⽤用
- 38.SWIFT_WHOLE_MODULE_OPTIMIZATION
- 39.SWIFT_WHOLE_MODULE_OPTIMIZATION
- 40.SWIFT_WHOLE_MODULE_OPTIMIZATION
- 41.SWIFT_WHOLE_MODULE_OPTIMIZATION Before After
- 42.SWIFT_WHOLE_MODULE_OPTIMIZATION 13m9.414s 4m24.634s Before After
- 43.启动性能
- 44.测量量pre-main时间
- 45.调试dyld性能
- 46.动态库合并 Dynamic Library Merging
- 47.基本原理理: Modify Main Target’s linker flags 删除“-l” flags 增加“-filelist” flag
- 48.1. Consolidate Assets (Pre)
- 49.2. Build pods filelist
- 50.3. Build internal libraries filelist
- 51.4. Consolidate Assets (Post)
- 52.5. Remove unnecessary embembed libraries
- 53.Xcode Build Phases例例⼦子
- 54.性能改善 -50% -12MB Pre-main Time Install Size
- 55.Swift和Objective-C混⽤用
- 56.Swift和Objective-C混⽤用 1. ⼀一定要在objective-c代码⾥里里⾯面正确的标柱nullable!!! 2. 增量量编译时间。
- 57.Thank you! KUN.CHEN@AIRBNB.COM