MacOS 切換 Xcode Command Line Tools

本文介紹如何在 MacOS 上有效切換 Xcode 版本,以解決因版本不兼容導致的編譯問題。透過簡單的指令操作,讀者可以學會如何安裝及切換到合適的 Xcode 版本,特別是在使用 Homebrew 和 Ruby Gem 時可能遇到的相關編譯器問題。此方法不僅適用於開發者更新 Clang 編譯器,也有助於維持系統環境的穩定性。

MacOS 切換 Xcode Command Line Tools
Photo by Gabriel Heinzer / Unsplash

TL;DR

去 apple 官網下載你要的 Xcode 版本(不知道為什麼蘋果都喜歡把下載網址藏得這麼隱密)然後重新命名,如果非當前版本會看起來像是無法使用的樣子,不過不理他我們只需要裡面的套件就好。

CleanShot 2024-04-13 at 16.42.23@2x.png

xcode-select -p # 確認 xcode-select 的路徑來源
clang --version # 確認來源跟版本

CleanShot 2024-04-13 at 16.37.55@2x.png

sudo xcode-select -s /Applications/Xcode_14.app
xcode-select -p
clang --version

CleanShot 2024-04-13 at 16.46.44@2x.png

收工!

前情提要

最近被一個問題搞的差點要重灌電腦,在開發環境上因為手癢重灌了整個 Homebrew 從 x86 架構切換到 arm 的架構,因為當時 m1 剛出來有些套件還沒法支援 arm 架構,所以選擇了用 Rosetta 模擬 x86 安裝 Homebrew。

因為在安裝 ruby gem 需要 C 語言的編譯器 Clang 來幫忙編譯,MacOS 就有自帶 Clang 編譯器,應該是會隨著系統版本升級,像我現在是 MacOS 14 然後 Clang 版本是 15;MacOS 13 的時候是 Clang 14 這樣,有點久遠了難以考證,是從同事的電腦查來的。

碰到的問題

安裝 ruby gem 時遇到 errors incompatible function pointer types 錯誤,此錯誤源於 CommandLineTools/usr/lib/clang/15.0.0。我嘗試過多種解決方案,包括重裝 Homebrew、切換 ruby 版本管理工具(如 rvm、rbenv、chruby),但問題仍然存在。

解決方案

直到我看到這篇文章深入淺出 Xcode Command Lines Tool(1) - 初探
提醒我可以切換 Xcode 版本替換 Clang 版本。

可是一個 Xcode app 7GB 起跳,原本想找找看有沒有辦法只下載
Command Line Tools for Xcode 14.3.1 安裝就好,結果會顯示系統太新無法支援。也沒有人開發個 xvm(XcodeVersionManger) 之類的,只有看到 xcode-install
是 base 在 ruby 之上的,覺得最乾淨的方法還是自己下載 Xcode app 最簡單了。於是就有了文章最一開頭所看到的切換版本方式。