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

WWDC2020 大會將經過 Apple Developer AppApple Developer網站免費向全部開發者開放! 從去年火遍全網的 SwiftUI 以及 Combine 到今年全新的「Swift Student Challenge」 無時不刻都在透露 Swift 時代已經來臨html

本人也是Swift一個深度着迷的開發者,而且有點喜歡玩底層! 很是感謝蘋果爸爸 Swift 高度開源, 可是平常開發過程當中總感受仍是缺了一點什麼...git

其實說白了要是可以我不能懂的底層,直接跑進源碼看看流程,分析一下原理!這就完美了... 因此我堅決果斷:Swift源碼編譯走起 github

着急嚐鮮的小夥伴,請點擊個人快速通道:Swift源碼編譯-Github地址macos

1、Swift編譯準備

  • apple / swift 官網地址 這裏clone咱們須要編譯的源碼
  • 版本準備:macOS 10.15.3 Xcode 11.5 (這是我當前的版本,應該是隻須要 Xcode 11.2)
  • 這裏最新的源碼編譯時須要 Xcode 12.0 我本人如今沒有升級,何況還只是beta 就不去玩,畢竟還要一段時間!以防不穩定
  • 因爲編譯速度仍是有點慢,建議電腦性能稍微高一點,具體大家本身定
  • 網絡建議:小樓梯 (不解釋),穩定網線
  • 最重要的就是:keep patient (確定會有各類問題報錯,仍是耗時很是嚴重:1-2h 這是正常現象)

2、開始編譯吧

首先編譯的手法有不少:Xcode - Ninja - Linux - VScode !各有各的方便,這裏咱們不去說其餘的先來一個你們很是熟悉的:Xcodeswift

1:準備編譯目錄

建立一個你喜歡的文件目錄xcode

mkdir swift-source
cd swift-source
複製代碼

2:clone 源碼

這裏用的是 swift-5.2.4-RELEASE 這個穩定版本,對於如今開發來講夠了!將來更新再說,請記住必定要根據我這個版本,由於版本不同會和你Xcode不兼容,後面報錯,我可就不負責了:哈哈哈哈安全

git clone --branch swift-5.2.4-RELEASE
https://github.com/apple/swift.git
複製代碼
  • 這裏若是你有小樓梯,應該很快的

3:clone 補充覈驗

  • 跳到swift文件下面 utils/update-checkout
  • clone 出後面編譯須要的文件
  • 這很重要,由於update-checkout 將檢出Swift源目錄旁邊的存儲庫
  • 這一步也是比較耗時的,這個時候你能夠:Have a cup of coffee
./swift/utils/update-checkout --tag swift-5.2.4-RELEASE --clone
複製代碼

4:buid Swift (waiting)

  • 利用swift源碼中的腳本編譯
./swift/utils/build-script -x -R --debug-swift
複製代碼
  • 蘋果github上面也指出了幾個編譯實例,你們也能夠本身去玩!
  • 若是你編譯還不是很熟練,也想避免踩坑(畢竟這一踩就要1-2h) 跟我給你的步驟走,安全又可靠!
utils/build-script --release-debuginfo --debug-swift # Swift frontend built in debug
utils/build-script --release-debuginfo --debug-swift-stdlib # Standard library built in debug
utils/build-script --release-debuginfo --debug-swift --force-optimized-typechecker # Swift frontend sans type checker built in debug
複製代碼

固然也會有一些玩得好的,想要更多參數命令,推薦這個腳本查閱 ./swift/utils/build-script -h 因爲篇幅緣由不展開,你們能夠自行去玩!好比說編譯標準庫和編譯LLDB以及所有 等等。。。bash

構建完上一步,就會進入很是漫長難受的等待過程!若是以爲無聊能夠趁這個時間去看看我其餘博客:Cooci_和諧學習——不急不躁markdown

⚠️:BUILD SUCCEEDED 這個字眼好好看哦!😄網絡

3、調試Swift源碼

要在 Xcode 中打開 Swift 項目,請打開/swift-source/build/Xcode-ReleaseAssert+swift-DebugAssert/swift-macosx-x86_64/Swift.xcodeproj。它將爲全部可用目標自動建立不少方案。常見的調試流程將涉及:

  • 選擇 swift scheme。
  • 調出 scheme 編輯器(⌘⇧<)。
  • 選擇 Arguments 選項卡,而後單擊 +
  • 添加命令行選項,這個根據自行需求設置,若是沒有特殊需求,正常編譯
  • 關閉scheme 編輯器。
  • 編譯並運行。

另外一個選擇是將方案更改成 Wait for executable to be launched,而後在終端中運行構建產品。

到目前爲止,基本操做就完畢了,你們能夠自由自在的暢玩在Swift的海洋,注意髮量 ~ 哈哈哈~

4、構建失敗緣由分析

  • clone 失敗大機率就是網絡問題

  • 確保使用正確版本的 Xcode

  • 若是您已更改 Xcode 版本,但仍然遇到與Xcode版本有關的錯誤,請嘗試將傳遞 --cleanbuild-script

  • 當發佈新版本的 Xcode 時,您能夠經過傳遞 --reconfigure 選項來更新構建,而無需從新編譯整個項目。

  • 確保全部存儲庫都是上述 update-checkout 命令中最新的

感謝

Swift源碼編譯-Github地址

OK 這篇文章就先寫到這裏,你們能夠先行去下載嚐鮮,若是以爲還能夠還請不要吝嗇你的 點贊和star

相關文章
相關標籤/搜索