Swift源碼編譯-讓底層更清晰

WWDC2020 大會(huì)將通過 Apple Developer AppApple Developer網(wǎng)站免費(fèi)向所有開發(fā)者開放! 從去年火遍全網(wǎng)的 SwiftUI 以及Combine 到今年全新的“Swift Student Challenge” 無時(shí)不刻都在透露 Swift 時(shí)代已經(jīng)來臨

本人也是Swift一個(gè)深度著迷的開發(fā)者,并且有點(diǎn)喜歡玩底層!非常感謝蘋果爸爸 Swift 高度開源, 但是日常開發(fā)過程中總感覺還是缺了一點(diǎn)什么...

其實(shí)說白了要是能夠我不能懂的底層,直接跑進(jìn)源碼看看流程,分析一下原理!這就完美了... 所以我毫不猶豫:Swift源碼編譯走起

著急嘗鮮的小伙伴,請(qǐng)點(diǎn)擊我的快速通道:Swift源碼編譯

一、Swift編譯準(zhǔn)備

  • apple / swift 官網(wǎng)地址 這里clone我們需要編譯的源碼
  • 版本準(zhǔn)備:macOS 10.15.3 Xcode 11.5 (這是我當(dāng)前的版本,應(yīng)該是只需要 Xcode 11.2)
  • 這里最新的源碼編譯時(shí)需要 Xcode 12.0 我本人現(xiàn)在沒有升級(jí),況且還只是beta 就不去玩,畢竟還要一段時(shí)間!以防不穩(wěn)定
  • 由于編譯速度還是有點(diǎn)慢,建議電腦性能稍微高一點(diǎn),具體你們自己定
  • 網(wǎng)絡(luò)建議:小樓梯 (不解釋),穩(wěn)定網(wǎng)線
  • 最重要的就是:keep patient (肯定會(huì)有各種問題報(bào)錯(cuò),還是耗時(shí)非常嚴(yán)重:1-2h 這是正常現(xiàn)象)

二、開始編譯吧

首先編譯的手法有很多:Xcode - Ninja - Linux - VScode !各有各的方便,這里我們不去說其他的先來一個(gè)大家非常熟悉的:Xcode

1:準(zhǔn)備編譯目錄

創(chuàng)建一個(gè)你喜歡的文件目錄

mkdir swift-source

2:clone 源碼

這里用的是 swift-5.2.4-RELEASE 這個(gè)穩(wěn)定版本,對(duì)于現(xiàn)在開發(fā)來說夠了!未來更新再說,請(qǐng)記住一定要根據(jù)我這個(gè)版本,因?yàn)榘姹静灰粯訒?huì)和你Xcode不兼容,后面報(bào)錯(cuò),我可就不負(fù)責(zé)了:哈哈哈哈

git clone --branch swift-5.2.4-RELEASE
  • 這里如果你有小樓梯,應(yīng)該很快的

3:clone 補(bǔ)充核驗(yàn)

  • 跳到swift文件下面 utils/update-checkout
  • clone 出后面編譯需要的文件
  • 這很重要,因?yàn)閡pdate-checkout 將檢出Swift源目錄旁邊的存儲(chǔ)庫
  • 這一步也是比較耗時(shí)的,這個(gè)時(shí)候你可以:Have a cup of coffee
./swift/utils/update-checkout --tag swift-5.2.4-RELEASE --clone

4:buid Swift (waiting)

  • 利用swift源碼中的腳本編譯
sudo ./swift/utils/build-script -x -R --debug-swift
  • 蘋果github上面也指出了幾個(gè)編譯實(shí)例,大家也可以自己去玩!
  • 如果你編譯還不是很熟練,也想避免踩坑(畢竟這一踩就要1-2h) 跟我給你的步驟走,安全又可靠!
utils/build-script --release-debuginfo --debug-swift # Swift frontend built in debug

當(dāng)然也會(huì)有一些玩得好的,想要更多參數(shù)命令,推薦這個(gè)腳本查閱./swift/utils/build-script -h 由于篇幅原因不展開,大家可以自行去玩!比如說編譯標(biāo)準(zhǔn)庫和編譯LLDB以及全部 等等。。。

構(gòu)建完上一步,就會(huì)進(jìn)入非常漫長(zhǎng)難受的等待過程!如果覺得無聊可以喝杯茶,最好是在一個(gè)無聊的午后編譯哈~

三、調(diào)試Swift源碼

要在 Xcode 中打開 Swift 項(xiàng)目,請(qǐng)打開/swift-source/build/Xcode-ReleaseAssert+swift-DebugAssert/swift-macosx-x86_64/Swift.xcodeproj。它將為所有可用目標(biāo)自動(dòng)創(chuàng)建很多方案。常見的調(diào)試流程將涉及:

  • 選擇 swift scheme。
  • 調(diào)出 scheme 編輯器(??<)。
  • 選擇 Arguments 選項(xiàng)卡,然后單擊 +。
  • 添加命令行選項(xiàng)。
  • 關(guān)閉scheme 編輯器。
  • 編譯并運(yùn)行。

另一個(gè)選擇是將方案更改為 Wait for executable to be launched,然后在終端中運(yùn)行構(gòu)建產(chǎn)品。

到目前為止,基本操作就完畢了,大家可以自由自在的暢玩在Swift的海洋,注意發(fā)量 ~ 哈哈哈~

四、構(gòu)建失敗原因分析

  • clone 失敗大概率就是網(wǎng)絡(luò)問題

  • 確保使用正確版本的 Xcode。

  • 如果您已更改 Xcode 版本,但仍然遇到與Xcode版本有關(guān)的錯(cuò)誤,請(qǐng)嘗試將傳遞 --cleanbuild-script。

  • 當(dāng)發(fā)布新版本的 Xcode 時(shí),您可以通過傳遞 --reconfigure 選項(xiàng)來更新構(gòu)建,而無需重新編譯整個(gè)項(xiàng)目。

  • 確保所有存儲(chǔ)庫都是上述 update-checkout 命令中最新的

收錄與推薦

OK 這篇文章就先寫到這里,大家可以先行去下載嘗鮮,如果覺得還可以還請(qǐng)不要吝嗇你的 點(diǎn)贊

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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