Xcode編譯速度提升優(yōu)化

背景

隨著項(xiàng)目規(guī)模越來(lái)越大 編譯速度越來(lái)越慢 是一個(gè)逃不過(guò)的問(wèn)題 特別是硬件資源有限的情況下 首次編譯時(shí)間 十幾二十分鐘成了司空見(jiàn)慣的事 很大程度上影響了開(kāi)發(fā)效率和寫(xiě)代碼的心情 像我15款 mbp 編譯代碼量約20萬(wàn)行 100個(gè)pod庫(kù)的項(xiàng)目 大概需要20分鐘 就算是第二次編譯 也基本需要3分鐘以上 占用了大量編寫(xiě)代碼的時(shí)間 故優(yōu)化編譯速度至關(guān)重要

編譯原理

程序編譯一般需經(jīng)幾個(gè)步驟:預(yù)處理、編譯、匯編、鏈接。
編譯是通過(guò)編譯器 把一種編程語(yǔ)言(原始語(yǔ)言)轉(zhuǎn)換為另一種編程語(yǔ)言(目標(biāo)語(yǔ)言),編譯生成一份完整的機(jī)器碼 然后再執(zhí)行。
原始語(yǔ)言是程序員直接編程的語(yǔ)言 如OC Swift
目標(biāo)語(yǔ)言是計(jì)算機(jī)可以執(zhí)行的二進(jìn)制指令機(jī)器碼
編譯器大多由兩部分組成:編譯器前端 Clang編譯器后端 LLVM
編譯器前端 Clang:預(yù)處理 --> 詞法分析 --> 語(yǔ)法分析 --> 生成IR(Clang Code Generator)
編譯器后端 LLVM:對(duì)IR優(yōu)化 --> 目標(biāo)代碼--> 匯編器 --> 機(jī)器碼(LLVM Code Generator)--> 鏈接 --> Mac-O文件

優(yōu)化方案

1、提升硬件性能(換個(gè)好點(diǎn)的電腦)
這是最有效也是最便捷的優(yōu)化方案 只不過(guò)成本有點(diǎn)高 好電腦貴
2、組件二進(jìn)制
組件二進(jìn)制通常指的是 把我們使用的第三方pod庫(kù)或者自己項(xiàng)目下沉的業(yè)務(wù)庫(kù)由代碼格式 打包成framework格式提高編譯速度
組件二進(jìn)制 就是在編譯階段把代碼先打包成庫(kù) 再導(dǎo)入到項(xiàng)目的過(guò)程
兩種方式:
一、自己制作
自己制作庫(kù)的參考方案
二、拿來(lái)主義:
1、cocoapods-packager
2、cocoapods-binary
3、cocoapods-imy-bin
3、Xcode參數(shù)設(shè)置
一、Debug Information Format設(shè)置
Debug改為DWARF,不生成dSYM
使用Instruments調(diào)試工具需要改回DWARF with dSYM file 不然會(huì)在Instruments中找不到調(diào)用堆棧

image

二、Precompile Prefix Header 設(shè)置為YES
預(yù)編譯頭文件,PCH 文件預(yù)編譯完成后,后面用到 PCH 文件的源文件編譯速度也會(huì)加快,缺點(diǎn)是 PCH 文件和 PCH 引用到的頭文件內(nèi)容一旦發(fā)生變化,引用到 PCH 的所有源文件都要重新編譯

image

三、Build Active Architecture Only設(shè)置
Debug改為YES,此項(xiàng)設(shè)置的是是否僅編譯當(dāng)前架構(gòu)的版本,如果為No,會(huì)編譯所有架構(gòu)的版本。需要注意的是,此選項(xiàng)在Release模式下必須為NO。

image

四、Optimization Level設(shè)置

image

五、Enable Index-While-Building Functionality設(shè)置
全設(shè)為NO。此項(xiàng)默認(rèn)打開(kāi),作用是 Xcode 編譯時(shí)會(huì)順帶建立代碼索引,但影響編譯速度。關(guān)閉后Xcode 會(huì)換回以前的方式,在空閑時(shí)間建立代碼索引

image

4、代碼層面的優(yōu)化
一、將常用代碼文件打包靜態(tài)庫(kù)
代碼組件化,切斷不同業(yè)務(wù)代碼之間依賴(lài),使得每次編譯的時(shí)候就只需要編譯自己模塊下的代碼
二、能用@class就用@class,盡量減少文件引用關(guān)系
三、減少Storybord和xib文件的使用
四、清理未使用的圖片等資源,清理未使用的類(lèi),或者合并重復(fù)功能的類(lèi)

來(lái)源整理
https://cloud.tencent.com/developer/article/1564372
http://m.itdecent.cn/p/fb51c90fe6d7

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容