加快Xcode中Swift编译和编译时间的8条技巧

Swift是一种高效的语言,但是如果您不小心的话,可能会遇到难以理解的构建和编译时间

Swift构建和编译时间可能要花费大量时间,这有很多不同的原因。 最突出和常见的原因是由于类型推断。 本质上,由于昂贵的类型检查过程,Swift编译器在解析和编译简单的Dictionary&Array文字时特别慢。

不幸的是,有时候不可避免地会出现缓慢的编译时间,但是好消息是,您可以利用某些工具和设置更改来加快Swift的编译和构建时间。

1)在Xcode中显示构建时间

首先,我们需要衡量您的编译时间。 重要的是要进行衡量,以确保本文中建议的更改实际上具有预期的影响。

您可以直接在Xcode的用户界面中启用计时器。 默认情况下,此计时器不可见,但是如果您在命令行中运行以下命令,则每次构建应用程序时都会显示时间。

defaults write com.apple.dt.Xcode ShowBuildOperationDuration -bool YES

启用计时器后,您将在Xcode的构建状态栏中看到编译应用所需的时间。

每次您要测量应用程序的构建时间时,建议您清理项目(包括构建文件夹⌘+⌥+K )并删除应用程序的派生数据。 您可以从命令行使用以下命令进行操作。

rm -rf ~/Library/Developer/Xcode/DerivedData

2)确定编译缓慢的代码

Xcode具有内置功能,可让您识别导致更长编译时间的函数和表达式。 您可以指定编译时间限制,并在代码库中标识超出此限制的区域。

打开项目的构建设置,然后将以下标志添加到“ Other Swift Flags

  • -Xfrontend -warn-long-function-bodies=100
  • -Xfrontend -warn-long-expression-type-checking=100

100整数表示您在函数和表达式上放置的编译时间限制。 以毫秒为单位。

编译代码时,任何超过100ms的函数或表达式都将被标记为警告。 这为您提供了重构代码并减少编译时间的机会。

3)仅构建活动架构

选择了Debug配置后,您的项目应仅构建活动架构。 此设置默认情况下应处于活动状态,但值得以防万一。

导航到Build Active Architecture Only在项目的构建设置中Build Active Architecture Only 。 确保将Debug设置为Yes并将release设置为No

4)优化dSYM生成

您可以使用dSYM文件来了解崩溃报告。 当您没有连接调试器时,这特别有用。 但是,它们需要花费一些时间来生产,因此只有在没有附加Xcode调试器的情况下才生产它们才有意义。

确保将“ Debug Information Format设置为始终为发布版本和未在模拟器上运行的调试版本创建dSYM文件。 在iOS模拟器上运行时,不需要创建它们。

5)模块优化

您可以设置构建设置,以便在运行编译器时,它将运行所有必需的源文件的一项作业,而不是每个源文件的一项作业。 这确实减少了并行性,但显着减少了重复工作,因此使您的构建时间更快。

要实现此目的,您只能在构建设置下的“ Other Swift Flags 的调试配置中添加-Onone 。 您还需要在调试构建设置中将“ Optimisation Level设置为“ Fast, Whole Module Optimization

如果您使用CocoaPods,则可以通过在Podile的末尾添加以下内容来优化所有依赖关系。

  post_install做|安装程序| 
installer.pods_project.targets.each做| target |
target.build_configurations.each | config |
如果config.name =='调试'
config.build_settings ['OTHER_SWIFT_FLAGS'] = ['$(继承)','-Onone']
config.build_settings ['SWIFT_OPTIMIZATION_LEVEL'] ='-Owholemodule'
结束
结束
结束
结束

6)第三方依赖

在iOS项目中处理第三方缺陷的最常见方法是使用CocoaPods。 它很容易使用,但如果您关心构建时间,则不是最佳选择。

可以使用的一种替代方法是迦太基。 它比CocoaPods难用,但可以缩短构建时间。 当您向项目中添加新的依赖项时,Carthage仅通过构建外部依赖项来实现。 如果您尚未添加新项目,则您的项目将不需要构建所有外部依赖项。

如果您想使用迦太基而不是CocoaPods,建议您在他们的Github页面上开始旅程,并在那儿按照他们的指示进行。

7)Xcode有一个新的构建系统

苹果在Xcode 9中引入了新的构建系统。 在撰写本文时,这只是预览,默认情况下未启用。 新构建系统的主要优点之一是构建时间更快。

要使用新的构建系统,可以在文件菜单中启用它,然后选择工作区设置 (如果不使用工作区,则选择项目设置 )。

从此菜单中,您将能够选择新的构建系统并减少编译Swift代码所需的时间。

8)在构建时启用并发

在Xcode 9.2中,Apple引入了一项实验功能,该功能允许Xcode并行运行Swift构建任务。 默认情况下,此功能未启用,您需要从命令行将其打开。

 默认写com.apple.dt.Xcode BuildSystemScheduleInherentlyParallelCommandsExclusively -bool否 

一些项目将比其他项目收益更大(在某些情况下可达40%)。 另一个警告您的警告是,如果您的计算机没有太多的RAM,这实际上可能会减慢您的构建速度。 如果是这种情况,您可以使用以下命令禁用并发的Swift构建任务。

 默认删除com.apple.dt.Xcode BuildSystemScheduleInherentlyParallelCommandsExclusively