Tag: Paul Kompfner

进入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 […]