2

探索Xcode8编译为什么那么慢?

 3 years ago
source link: https://www.devashen.com/blog/2016/12/21/xcode8build/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

探索Xcode8编译为什么那么慢?

Dec 21st, 2016 10:12 am | 评论

随着Xcode8swift3.0的正式到来,我开始着手将swift2.3的项目转到swift3(至于转换过程,这里不多做介绍,Xcode自带的转换工具,基本可以转换80%左右,剩下的自己慢慢调试即可。)但是,转到swift3只会,在用Xcode8编译,发现编译过程变得非常慢,哪怕打一个空格,都要重新编译很久。于是在网上查找解决办法,查找了半天各种方法全用,发现于事无补。
  有什么加一个HEADERMAP_USES_VFS = YES()这是地址,反正这个对我没用,感兴趣的话自己试试

针对这种情况,我就自己探索,出发点是排查哪些文件,哪些方法导致编译变慢?

探索Xcode编译,在哪些地方可以看到编译文件过程


通过多次编译查看,发现在Xcode左边栏,最后一个选项,是每次的编译运行等记录, 每行记录中都会有每次编译的文件编译记录。如下图

图1

再次查看正在编译的一条记录(正在编译的记录后面有一个转圈圈的”菊花“),发现有图中1、2两种标识, 一个绿色✅说明,这是编译完成了,另一个是灰色→箭头,说明是正在编译;此时发现灰色一直停留在这里,指向图中的文件,左边的菊花一直转个不停, 编译卡住了。这样一来就找到编译是什么文件导致的那么慢。

图2

排查文件中哪些代码导致的编译卡住?


排查的方法,采用比较笨的方法,暴力注释方法:就是注释找到卡住的文件中的所有方法里的代码,不要注释方法,再次编译,此时发现该文件很快通过编译,然后在依次解开部分方法注释,再次编译,直到发现解开某个方法的注释后,编译再次卡住,那就说明那个方法中的代码写的有问题,然后在依次注释,解开注释,排查方法中的某一行代码的问题。经过一番排查,我找到了我代码中卡住的部分代码,如下图红色圈中的代码

图3

在字典中的key对应的value,没有给直接的值,而是给出一个表达式,这样会导致Xcode8的编译速度极其慢,不知道为什么会出现这样的问题,之前的Xcode版本是没有的。

找到问题所在,解决问题就简单了,于是修改代码如下图:

图4

修改之后,再次编译,重新回到了快速编译的时代了,再也不用等上5-10分钟不等了。

以上过程,是针对我遇到的问题而言的,不知道是否存在普遍性,如若你也遇到,刚好看了我的文章,也解决了问题,那就会心一笑吧,如若你也遇到了,但是没有解决问题,也请你会心一笑吧。
这是苹果开发者提到的Xcode8编译超慢的问题,我看了下,也做了对应修改,发现对我并没有什么用, 感兴趣的话进去看看吧

有时候自己慢慢去探索出问题的所在,也是很不错的体验。


后来我知道了,也可以通过,查看具体的swift函数编译时间来定位哪个函数卡住了,而不用暴力注释法.
首先要到Build Settings 给 Other Swift Flags 添加一项 -Xfrontend -debug-time-function-bodies
就可以查看编译通过的文件中的函数编译时间,找到绿色✅的文件的那一行,在最后面有一个图标,点击展开具体内容,向下移动就会看到每个函数执行的具体时间。

Posted by Ashen

Dec 21st, 2016 10:12 amiOS

« iOS 中的网络加密 读书,从2017开始 »


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK