IOS編譯過程

打包的到底經(jīng)歷了哪些過程?

1寫入輔助文件。

2運(yùn)行預(yù)設(shè)腳本

3編譯文件

4鏈接文件

5拷貝資源文件

6編譯故事版(StoryBoard)

7鏈接故事版

8編譯Asset文件

9運(yùn)行CocoaPods

10生成最新的.app包

11將Swift標(biāo)準(zhǔn)庫拷貝到.app里

12簽名

13完成打包

寫入輔助文件

將項(xiàng)目里面的腳本、依賴庫加入在這一步驟創(chuàng)建的一個.app文件里

01

運(yùn)行預(yù)設(shè)腳本

在Build Phases里面能見到的三方庫以及CocoaPods里所包含的庫

編譯文件

生成Mach-o可執(zhí)行文件

鏈接文件

將所有Mach-o文件合并成一個文件

拷貝資源文件

將資源文件拷貝到.app里

編譯故事板文件

鏈接故事板文件

02

編譯Asset文件

如:asset存放的圖片資源文件,除開app的icon和啟動圖,形成機(jī)器碼

運(yùn)行CocoaPods

生成包含以上資源的.app文件

拷貝Swift標(biāo)準(zhǔn)庫到.app里

簽名

將.app文件簽名

打包完成


蘋果(C/C++/OC)編譯器經(jīng)歷的過程,有幾部分組成?

編譯器

將一種編程語言,即原始語言(OC)轉(zhuǎn)換為另一種編程語言(機(jī)器碼)的過程

編譯器組成部分——前端和后端

1.前端的分析工具有GCC、Clang。主要負(fù)責(zé)詞法分析、語法分析、生成中間代碼

2.后端,也就是LLVM。將前端生成的中間代碼作為輸入,通過LLVM生成機(jī)器碼

經(jīng)歷過程

03

蘋果公司在2007年后,將Clang替代了GCC,效率快了3倍,目的就是為了提升編譯器的編譯速度

經(jīng)歷了那幾個編譯過程?

預(yù)處理

Clang會預(yù)處理你的代碼,比如把宏嵌入到對應(yīng)的位置、刪除代碼里面的注釋

詞法分析

語法分析

經(jīng)過詞法分析、語法分析后,會生成一個抽象語法樹(AST)

靜態(tài)分析


04

在這一步會生成更接近機(jī)器碼的語言,即IR,它會把代碼錯誤、警告全部識別出來

生成中間代碼和優(yōu)化

這一步要做兩件事,第一件就是生成匯編語言;第二件就是將匯編語言轉(zhuǎn)換成機(jī)器碼,也就是我們通??吹降亩M(jìn)制文件.o文件。

鏈接

將前一步生成的.o文件,轉(zhuǎn)換成Mach-0可執(zhí)行文件文件


所以到這里你就會明白,其實(shí)當(dāng)你拿到一個項(xiàng)目點(diǎn)擊Run或者打包上傳AppStore,Archive的時候,它經(jīng)歷了文章最開始講的13個過程。而當(dāng)你Build項(xiàng)目的時候,并未有經(jīng)歷簽名和打包的2個步驟。

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

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