[Xcode]建立顺序

本篇出自于WWDC 2018的Xcode部分内容构建速度更快。

Build的速度取决于每个Target的建筑速度,对于一个项目而言,targets的是固定的,所以如果以单一线程的概念去build,总时间也是固定的,因此,采用parallizing(平行化)来建立,势在必行。

因此,如何决定某些目标可以平行构建,取决于目标之间的相依性(dependency)。

目标是什么?

Target是用来告诉Xcode说,我要你build出什么东西?是iOS App?Framework?还是单元测试?

比方你要New> Project…时,就是设定一个目标:

相依性

像是Library,Tests,这些都是一个Target,建立并实作一个专案时,其实就会去设定这些target之间的dependecy。在Xcode里面,有两种方式去设定dependency:

  • 隐含的
  • 显式的

Xcode的专案里面,从Project Navigator点选专案,选择Targets,然后选择Build Phase,你会看到Target Dependencies和Link Binary with Libraries。前者是显式的,其中是隐式的。

根据这些相依性,Xcode可以决定构建的顺序,而新的Xcode就是根据这些相依性来进行优化,决定平行化的布局,相依性可以依据相依图(Dependency Graph)来分出几种类型:

  • 做所有事情:这种相依性可以让一个Target分割成几个小的Targets去执行。像是测试,可以进行单元测试和UI测试。
  • 吵闹的邻居:主要是两个目标的相依度不高,因此为了那少部分的相依性,可以增加一个小的Target来达成(这边“小”的意思是说,build花的时间很少)平行化。一起建造。
  • 被遗忘的人:有些依赖其实是不需要的,就好像写code一样,总会有些多余的code,我们便把它删除,直接让其中平行。