Tag: Michael Bachand

进入Swift 3

刘承 银 , Paul Kompfner 和 Michael Bachand 自从该语言诞生以来,Airbnb就一直在使用Swift。 使用这种现代的,安全的,社区驱动的语言,我们已经看到了许多好处。 直到最近,我们的大部分代码库都在Swift 2中。我们刚刚完成向Swift 3的迁移,正好赶上了放弃Swift 2支持的Xcode版本。 我们希望与社区分享我们的迁移方法,Swift 3对我们的应用程序的影响以及我们在此过程中获得的一些技术见解。 “不破坏发展”的方法 我们有许多用Swift编写的模块和几个第三方库,其中包括成千上万的文件和成千上万的代码行。 似乎这个Swift代码库的大小不足以挑战,Swift 2和Swift 3模块无法相互导入这一事实使迁移过程变得更加复杂。 即使导入Swift 2库的正确Swift 3代码也不会编译。 这种不兼容使并行化代码转换变得困难。 为了确保我们可以逐步转换和验证代码,我们首先创建了一个依赖关系图,该关系图对36个Swift模块进行了拓扑排序。 我们的升级计划如下: 将CocoaPods升级到1.1.0(以支持必要的Pod升级) 将第三方Pod升级到Swift 3版本 按拓扑顺序转换我们自己的模块 通过与已经完成迁移的其他公司交谈,我们了解到冻结开发是一种常见策略。 我们希望尽可能避免代码冻结,即使这对于进行迁移的人员来说也增加了一些难度。 由于转换工作将不容易并行化,因此“多手协作”方法效率低下。 另外,由于很难估算转换所需的时间,因此我们希望确保在迁移期间可以继续发布新版本。 我们有3个人从事迁移工作。 有两个人专注于代码转换,而第三个人则专注于协调,与团队沟通和基准测试。 最后,包括准备工作,我们的实际项目时间表如下所示: 1周:调查和准备(一个人) 2.5周:转换(两人),分析转换的影响以及与较大团队的沟通(一个人) 2周:质量检查和错误修复(质量检查小组+各种iOS功能所有者) Swift 3的影响 尽管我们对Swift 3的新语言功能感到兴奋,但我们也想了解该更新将如何影响我们的最终用户和整体开发人员体验。 我们密切监视了Swift 3对发行IPA大小和调试构建时间的影响,因为到目前为止这是我们最大的两个Swift痛点。 不幸的是,在尝试了不同的优化设置之后,Swift 3在两个指标上的得分仍然略差。 发行IPA大小 迁移到Swift 3之后,我们看到发行版IPA增加了2.2MB。 一点挖掘表明,这几乎完全是由于Swift的库的大小增加了(我们自己的二进制文件的大小几乎没有变化)。 以下是一些我们发现未压缩二进制大小增加的示例: libswiftFoundation.dylib:增长233.40%(3.8 […]

我们的Swift样式指南现已开源

Swift在Airbnb的简史 在2014年的WWDC上,Apple用一种新的语言:Swift使我们感到惊讶。 在Airbnb,我们很快跃居第一,并在2014年8月甚至在Swift达到1.0之前就编写了第一行Swift。 那年晚些时候,苹果发布了Apple Watch和WatchKit。 考虑到社区对传闻已久的Apple Watch的兴奋,我们在2015年4月打赌,开始完全在Swift 1.1中编写Airbnb的Apple Watch应用程序的第一个版本。 在WWDC 2015上,Apple正式宣布了Swift 2.0。 因此,当需要构建Apple TV应用程序时,我们尝试了一下并使用Swift 2.0进行了编写。 在这两个成功的试验之后,我们于2016年1月决定要在Swift 2.0中编写所有新功能。 一切进展顺利,直到“大雨燕”改名降落。 为了升级到Swift 3,我们要求一个由两个人组成的团队在5周的时间内进行代码库的迁移。 幸运的是,升级到Swift 4更加简单。 自2017年10月以来,我们的整个代码库都位于Swift 4中。 为什么要使用风格指南? 斯威夫特是一门年轻的语言。 当我们在2014年开始使用它时,我们还没有标准化的Swift样式指南。 我们让15位工程师在我们的代码库中放松下来,他们每个人都以自己的个人Swift风格编写。 很快变得很清楚,如果我们不同意标准化的风格,我们要么花太多时间讨论PR中的风格,要么我们的代码库就像杰克逊·波洛克的画。 当我们在使用Apple TV应用程序时,我们开始了一份非正式的风格指南。 在2016年1月,这与其他临时工作相结合,成为了正式的Airbnb Swift样式指南,我们开始合作定义在Airbnb上编写Swift的首选方式。 苹果和Swift社区为如何编写Swift提供了宝贵的指导。 即使他们绝对影响了我们在Airbnb上编写Swift的方式,我们仍然认为保留自己的样式指南是一种有价值的方法,可以迭代对我们认为正确的事情,同时与社区保持一致。 这就是为什么我们将Apple的建议添加到我们的指导原则中的原因。 我们不想手动识别和更正违反样式指南的行为,因此我们分别采用了Swift社区中最受欢迎的linter和formatter,分别为SwiftLint和SwiftFormat。 在我们的样式指南中,您将找到我们的SwiftLint和SwiftFormat配置。 如果您想使用与我们相同的规则,只需抓住它们并开始在您的项目中使用它! 我们为什么要公开采购? 自从我们开始编写Swift以来,已经过去了很多年,并且社区已经在某些模式上实现了标准化。 Swift语言和社区对我们来说很棒,因此我们想通过分享一些我们在Airbnb上编写Swift所用的模式来做出贡献。 我们了解并非所有人都会同意我们在Airbnb的工作方式。 我们相信有异议的人,我们很想听听您的反馈-我们很高兴分享我们的想法。 如果您不同意或认为我们缺少什么,欢迎您的贡献! 拥抱斯威夫特 在Airbnb,我们将Swift视为iOS开发的未来,并且我们将继续推动尖端本机技术的发展。 鉴于我们即将淘汰React Native,我们将在内部Swift和Kotlin库中投入更多资源。 我们70%的新本地Android代码是用Kotlin编写的,而90%的iOS是用Swift编写的。*我们一直在迁移到最新的语言功能。 *不包括旧版React Native代码。