如何在XCode中减less编译时间/加快编译时间?
通常可以使用哪些策略来减less任何XCode项目的构build时间? 我最感兴趣的是XCode特定的策略。
我正在使用XCode进行iPhone开发,而且我的项目正在慢慢变得越来越大。 我发现编译/链接阶段开始花费比我想要的更多的时间。
目前,我是:
-
使用静态库,使我的大部分代码不需要每次我清理和build立我的主要项目时编译
-
已经从我的应用程序中删除了大部分资源,并尽可能在iPhone模拟器中用硬编码的文件系统path进行testing,这样我的资源就不必经常打包,因为我对它们进行了更改。
我注意到“检查依赖关系”阶段似乎比我想要的更长。 任何提示,以减less,以及将不胜感激!
通常,你可以做的最大的事情是控制你的头文件的包含。
在源代码中包含“额外的”头文件大大减慢了编译速度。 这也往往会增加依赖性检查所需的时间。
而且,使用前向声明而不是头部包含其他头部可以大大减less依赖关系的数量,并帮助您完成所有的计时任务。
我写了一篇关于如何改进Spotify iOS开发周期的博文:
从iOS编辑 – 构build – testing周期中削减50%的等待时间
它归结为:
1)停止生成dSYM捆绑。
2)如果使用Clang,则避免使用-O4进行编译。
就我个人而言,我将编译器切换到了我的Mac开发项目的LLVM-Clang,并且看到了构build时间的大幅缩短。 还有LLVM-GCC编译器,但我不确定这将有助于构build时间,如果LLVM-Clang不适用于iPhone应用程序编译,那么您也可以尝试这样做。
我不是100%肯定LLVM在iPhone上的开发支持,但我想我记得阅读新闻饲料,它是。 这不是你可以在你的代码中实现的优化,但它是值得的尝试!
如果你不使用8GB的RAM,现在升级。
我刚刚将我的MacBook Pro从4GB升级到8GB。 我的项目编译时间从2:10到0:45。 我被改进的地板所覆盖。 它也使网页浏览更加快速,并且在编制索引时Xcode的性能也是如此。
Xcode将用于执行任务的线程数量默认为您CPU的核心数量相同。 例如,带有Intel Core i7的Mac有两个内核,所以默认情况下Xcode最多使用两个线程。 由于编译时间通常是I / O约束而不是CPU约束,因此增加Xcode使用的线程数可以为编译提供显着的性能提升。
尝试configurationXcode使用3,4或8线程,看看哪一个线程提供最佳的性能为您的使用情况。
您可以设置Xcode在terminal中使用的进程数量,如下所示:
defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4
请参阅Xcode用户默认值了解更多信息。
简单的回答:在本地networking上添加另一台运行XCode的机器。 XCode包含distcc来执行分布式编译。 它甚至可以使用Bonjour来查找其他构build主机,这大大简化了configuration过程。 对于大型build筑,分配可以使你的速度提高,几乎与build造机器的数量成线性比例(2台机器需要一半的时间,三个需要三分之一等等)。
要了解如何设置这个,你可以参考这个开发文档 。 它还具有其他有用的构build时间改进策略,如使用预编译头文件和预测构build。
编辑:不幸的是,似乎苹果已经从Xcode 4.3中删除了这个function: http : //lists.apple.com/archives/xcode-users/2012/Mar/msg00048.html
Xcode 5有一个可以执行CI的服务器版本,但是我怀疑这会给ad hoc开发人员构build带来什么好处。 但是,有一些未经宣布的function应该大大加快构build时间。
编译时间减半(至less对于iOS项目来说)的一个重要的技巧是将Build Settings / Architectures / Build Active Architecture Only设置为YES 。
这样做(特别是64位iPad / 64位编译器的出现)是不为当前不使用的体系结构构build二进制文件。
确保您记得在提交到app store时重新启用此设置 ,否则您的二进制文件将无法validation。
您提到使用静态库为您最经常使用的文件,以防止编译。 你可以通过把代码放在你的代码中来完成类似的事情,而不是在预编译头文件中的静态库中。 至less他们只会被编译一次。
如果您的项目中有多个编译types(例如Obj-C,Obj-C ++,C ++),则必须小心避免出现问题。
嘿,我会build议你优化你的项目的物理结构。 关于这一点(至less在C ++世界中)有一些很好的解读,但是我做了Objective-C,并且经常应用相同的原则。
这里有一篇关于项目物理结构优化的大文章,它可以提高编译时间游戏内部:物理结构第一部分
祝你好运 :)
我使用了一个脚本来使用RAM驱动器,以及一些“前向声明”优化,我的项目清理编译时间从53秒到20秒。
我很想在AppStore上findGui,但是宁愿select命令行。 我把脚本作为git仓库的一部分。
要查看构build时间,请在terminal中input: “defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES”
重新启动Xcode以注意工具栏中的构build时间。 (这是我使用objective-c非干净的编译时间)
根据自己的喜好调整脚本。 – 注意脚本清除派生的数据文件夹。
#!/bin/sh #2 GIG RAM GIGA_BYTES=$((2*1024*1024*1024)) # a sector is 512 bytes NUMSECTORS=$((${GIGA_BYTES}/512)) #ram disk mydev=`hdiutil attach -nomount ram://$NUMSECTORS` newfs_hfs $mydev # make mount point MOUNT_POINT=/Users/your_user_name/Library/Developer/Xcode/DerivedData # ******************************************* # ** WARNING - MOUNT POINT WILL BE DELETED ** # ******************************************* rm -rf ${MOUNT_POINT} mkdir -p ${MOUNT_POINT} # mount mount -t hfs $mydev ${MOUNT_POINT} echo unmount $(MOUNT_POINT)
要查看效果并控制RAM Drive:
mount - see mount points umount mount_point - unmount point diskutil list - see disks diskutil eject /dev/diskX - eject the disk df -ahl - see free space
注意:我基本上使用macOs提供的hdiutil。 我尝试切换-kernel选项(不交换磁盘),但在我的机器上失败,说它没有实现。
也许新的操作系统即将推出,我们将看到更多的改进,因为新的文件系统复制function非常快,并可能使这个脚本冗余。
快速注意关于“抛出更多的硬件”的方法..
总结:在进行重大的硬件升级之后,我经历了一个很小的速度增长
testing:build立/运行完全相同的项目在克隆macbooks(唯一的区别应该是他们的硬件)
旧款Macbook Air(1.86GHZ Core 2 Duo仅2GB内存)与全新Macbook Pro(2.3GHZ酷睿i7 8GB内存)
build立在IPHONE 3GS上
Macbook Air 1:00 – 1:15
Macbook Pro〜1:00
速度增加=> 0到0:15
build立在IPHONE 4S上
Macbook Pro〜0:35
Macbook Air〜0:50
速度增加〜> 15秒
**部分testing:在两台机器之间的模拟器build立时间之间有显着的差异
在我继续的经验..你会得到一个重大的增加时,在PHONE硬件(即build立在3GS与iPhone 5(或4)的硬件上的时间)..至less在我的经验,限制因素是手机硬件(不是电脑硬件)。
SO ..以获得最快的build造时间..
选项1)编写代码并在快速计算机上运行模拟器
选项2)与最新的iPhonebuild立在设备上
一个字:TmpDisk
- 使用TmpDisk创build一个1.5Gb的RAM磁盘
- 将Xcode>首选项>位置>派生数据更改为/Volumes/1.5Gb/xcode数据
- 享受速度!
如果你的整个项目在每次运行时都被重build,这可能是XCode 7.0 <= 8.1中的错误,给你一个难题。
将用户定义的版本设置HEADERMAP_USES_VFS创build为YES,可将macbook编译时间从每次75秒缩短到25秒。 看到Xcode 8完整的项目重build更多的信息。
我用5960x CPU切换到Hackintosh,超频到4.4GHz只是为了降低Xcode的编译时间。 这是8个核心和16个线程。 总计花费3000美元用于粉碎所有Mac的计算机。 不过,我已经花了至less10天的时间build立起来了,首先是约塞米蒂。 我有六个月的停机时间,当我无法更新macOS,而Xcode需要一个新的操作系统。 我刚刚运行了塞拉利昂,生活又恢复了良好。
我的2,8 GHz i7双核16 GB内存MacBook Pro在75秒内编译我的项目,在20秒内Hackintosh。 (Swift,dlib,opencv c ++在项目中)
然而最大的问题是Xcode在编译swift时似乎并没有使用multithreading。 这是瓶颈,我希望他们能尽快解决。