代码之家  ›  专栏  ›  技术社区  ›  Brad Parks

如何在Xcode中减少构建时间/加快编译时间?

  •  67
  • Brad Parks  · 技术社区  · 15 年前

    通常可以使用什么策略来减少任何Xcode项目的构建时间?我主要对Xcode特定的策略感兴趣。

    我正在使用Xcode开发iPhone,我的项目正在慢慢地变得越来越大。我发现编译/链接阶段开始花费比我希望的更多的时间。

    • 使用静态库来实现这一点 每次我清理和构建时编译 我的主要项目

    • 已从我的 应用程序,并用硬拷贝进行测试 iPhone中的编码文件系统路径 只要有可能,我的 在我对它们进行更改时打包。

    我注意到“检查依赖项”阶段似乎比我希望的要长。任何减少这种情况的建议都将不胜感激!

    14 回复  |  直到 5 年前
        1
  •  56
  •   Reed Copsey    15 年前

    通常,您能做的最大的事情是控制头文件的包含。

    在源代码中包含“额外”头文件会大大降低编译速度。这也会增加依赖项检查所需的时间。

    forward declaration 不使用包含其他标头的标头,而是可以显著减少依赖项的数量,并有助于所有计时。

        2
  •  23
  •   fons    7 年前

    我写了一篇内容广泛的博文,介绍了我如何改进Spotify的iOS开发周期:

    Shaving off 50% waiting time from the iOS Edit-Build-Test cycle

    1) 停止生成dSYM捆绑包。

        3
  •  17
  •   Form    15 年前

    就我个人而言,我在Mac开发项目中将编译器切换到LLVMClang,并且已经看到构建时间的大幅减少。还有LLVM-GCC编译器,但我不确定这是否有助于缩短构建时间,但如果LLVM-Clang不适用于iPhone应用程序编译,您也可以尝试使用它。

        4
  •  12
  •   memmons    13 年前

    您可以从终端设置Xcode使用的进程数,如下所示:

    defaults write com.apple.Xcode PBXNumberOfParallelBuildSubtasks 4

    请看 Xcode User Defaults 了解更多信息。

        5
  •  12
  •   Dan Carter    13 年前

    如果您没有使用8GB的RAM,请立即升级。

    我刚把我的MacBookPro从4GB升级到8GB。我的项目构建时间从2:10到0:45。我被改进搞砸了。它还可以进行web浏览,以研究snappier和索引时的一般Xcode性能等。

        6
  •  11
  •   Iulian Onofrei Denis Oliveira    5 年前

    要了解如何设置此项,您可以咨询 this development doc . 它还具有其他有用的构建时改进策略,例如使用预编译头和预测构建。

    编辑:遗憾的是,从Xcode 4.3开始,苹果似乎已经删除了此功能: http://lists.apple.com/archives/xcode-users/2012/Mar/msg00048.html

    Xcode 5有一个可以执行CI的服务器版本,但我怀疑这会给临时开发人员构建带来任何好处。但是,有一些未公布的特性应该会显著加快构建时间。

        7
  •  7
  •   bobobobo    11 年前

    将编译时间减半(至少对于iOS项目)的一个重要技巧是设置 构建设置/体系结构/仅构建活动体系结构 .

    它的作用(尤其是64位iPad/64位编译器的出现)是 不建 当前未使用的体系结构的二进制文件。

    请确保记得重新启用此设置

        8
  •  6
  •   Wayne    7 年前

    我使用了一个脚本来使用RAM驱动器,并对我的项目进行了一些“前向声明”优化 建造时间从53秒增加到20秒。

    转到命令行。我将脚本作为git存储库的一部分。

    “默认写入com.apple.dt.Xcode ShowBuildOperationDuration是”

    重新启动Xcode以注意工具栏中的构建时间。 Cached build times

    #!/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驱动器,请执行以下操作:

    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
    

    注: 我尝试打开-kernel选项(不交换到磁盘),但在我的机器上失败了,说它没有实现。

    也许新的操作系统即将推出,我们将看到更多的改进,因为新的文件系统拷贝功能非常快,并且可能使这个脚本变得多余。

        9
  •  2
  •   Tetrad    15 年前

    如果项目中有多种编译类型(例如Obj-C、Obj-C++、C++),则必须小心避免出现问题。

        10
  •  2
  •   Goles    13 年前

    嘿,我建议你优化你的项目的物理结构。关于这一点有一些很好的理解(至少在C++世界),但是我做Objto-C,同样的原则经常适用。

    这是一篇关于项目物理结构优化的好文章,它有助于提高编译时间 Games From Within: Physical Structure Part 1

    祝你好运:)

        11
  •  2
  •   Joaquim Paz Carvalho    8 年前

    一个词:TmpDisk

    1. 使用TmpDisk创建1.5Gb RAM磁盘
    2. 更改Xcode>偏好>地点>导出数据到/Volumes/1.5Gb/xcode数据
    3. 享受速度!
        12
  •  1
  •   user353877    12 年前

    测试:在克隆的MacBook上构建/运行完全相同的项目(唯一的区别应该是它们的硬件)

    旧Macbook Air(1.86GHZ Core 2 Duo仅2GB内存) vs 全新Macbook Pro(2.3GHZ核心i7 8GB RAM)


    Macbook Air 1:00-1:15
    MacBookPro~1:00

    =>速度增加0到0:15




    =>~15秒的提速

    **部分测试:两台机器之间的模拟器的构建时间确实存在显著差异


    以我的持续经验。。当你在手机硬件上做出重大改变时(即3GS与iPhone5(或4)的构建时间),你会得到显著的提升。。至少在我的经验中,限制因素是电话硬件(而不是计算机硬件)。

    所以以获得最快的构建时间。。

    选项2)使用最新的iphone在设备上构建

        13
  •  1
  •   Community Ramakrishna.p    7 年前

    如果每次运行时都会重建整个项目,那么这可能就是XCode 7.0中的错误<=8.1给你一段艰难的时光。

    创建用户定义的构建设置HEADERMAP_使用_VFS将macbook编译时间从每次75秒缩短到25秒。看见 Xcode 8 does full project rebuild 更多信息。

        14
  •  -1
  •   Thyselius    8 年前

    我用5960x的CPU切换到Hackintosh,超频到4.4GHz只是为了缩短Xcode编译时间。这是8个内核和16个线程。一台能压碎所有Mac电脑的电脑总共花费3000美元。然而,我已经花了至少10天的时间来安装它,首先是约塞米蒂公司。我有六个月的停机时间,因为我无法更新macOS,而Xcode需要更新的操作系统。我刚让它运转起来,生活又好起来了。

    然而,最大的问题是Xcode在编译swift时似乎没有使用多线程。这是瓶颈,我希望他们能尽快解决。