← 返回開發日記

告别 Xcode 卡頓:把編譯丟到雲端 Mac mini M4

踩坑手記 · 2026.06.02 · 約 8 分鐘閱讀

輕薄筆電編輯、雲端 Mac mini M4 負責 Xcode 重編譯

我平常用 16GB 的 MacBook Air 接案。寫 Swift 沒問題,一按 ⌘B 全專案編譯,風扇立刻吼、SourceKit 跟編譯器搶同一顆 SSD,游標會頓一下——這種時候其實寫不下去。買頂規 MacBook Pro 當然可以,但我真正要的是:編譯別佔著我唯一這台筆電

試了幾輪之後,能長期用的組合很單純:輕薄筆電只改 code、推 Git租一台雲端 Mac mini M4 專跑 xcodebuild。不是把整個 Xcode 掛在 VNC 裡寫一整天(跨太平洋延遲我試過,比本機還煩),遠端就是一台一直開著的 build machine。

本機輕薄筆電 編輯 · Git · 輕量預覽 VS Code / Xcode 編輯 diff · commit · push 低功耗 · 安靜 · 續航 git / ssh 雲端 Mac mini M4 xcodebuild · 測試 · Archive Derived Data 快取 簽章 · 公證 · CI 7×24 · 高記憶體頻寬 重編譯在雲端跑,筆電繼續寫程式
筆電負責編輯與 Git;Clean Build、測試與 Archive 在雲端 M4

先搞清楚:是編譯慢,還是索引在拖

活動監視器裡若是 swift-frontendldXCBBuildService 吃滿 CPU,就是 build 在搞鬼;若 SourceKitService 長期偏高,丟遠端 build 幫助有限,先查 Derived Data 是否膨脹、build/ 有沒有被 commit 進去。我曾以為要加記憶體,清掉 40GB 舊 Derived Data 後,本機增量編譯就回來了——遠端 build 解的是「重活別在筆電跑」,不是萬靈丹。

Clean Build 越到後面越慢,也常是熱節流:前幾分鐘還行,後面降頻,會以為專案又變肥。把這類工作丟到機房的 M4,至少熱跟噪音不在桌上。

我的分工

  • 本機: 改原始碼、git commit、看 MR diff、偶爾單檔 Preview。不在 Air 上跑完整 ⌘U
  • 雲端 M4: xcodebuild buildtestarchiveexportArchive。憑證跟 match 只放在那台的鑰匙圈。
  • 真機: 手機在身邊就插筆電;不然在 build machine 上跑,日常很少為了 debug 開 VNC。

Xcode 沒有官方的「遠端編譯」按鈕,認了這點後面就順很多。

從零到能編過

1. 版本對齊。 本機與遠端各跑 xcodebuild -version,大版本要一致。我踩過雲端還是 Xcode 15、本機 16,Swift 直接編不過。

2. 只用 Git 同步。 build machine 上 git clone 同一個 remote;子模組用 deploy key。別 rsync 整包專案,.git 狀態很容易亂。

3. Derived Data 固定在遠端。 我用 /Users/builder/Cache/DerivedData,腳本帶 -derivedDataPath。別把筆電的 Derived Data rsync 上去——又大、路徑又綁機器,索引會鎖死。Apple 也提到 build 會大量寫中間檔(Building your app)。

4. 一條指令觸發遠端編譯。 專案根目錄 Makefile:

Makefile(節錄)
REMOTE := builder@your-m4.host
REPO   := MyApp
SCHEME := MyApp

build-remote:
	git push origin HEAD
	ssh $(REMOTE) 'cd ~/workspace/$(REPO) && 	  git pull --ff-only && 	  xcodebuild -scheme $(SCHEME) -configuration Debug 	    -derivedDataPath ~/Cache/DerivedData build'

失敗看 SSH log,改完 push 再 make build-remote。參數不熟看 TN2339

5. 確認真的省時間。 同一個 commit:Air 全編一次、遠端編一次。我那時遠端快約 2.5 倍,之後本機預設不再 Clean Build。

什麼時候才開 VNC

匯入 p12、鑰匙圈按允許、Archive 精靈某個只有 GUI 的勾選——開 VNC 處理完就關。別在 VNC 裡寫一天 Swift。SSH 跑 build 夠用,螢幕分享是偶爾的工具。

三人以上:同一台 M4 兼 CI

一個人用 SSH 就夠。團隊可註冊 GitHub self-hosted runner(官方說明),白天手動 SSH,晚上 push 共用 Derived Data。我們後來把 Release、match 也固定在那台。簽章 job 怎麼拆:自建 runner 筆記

我踩過的坑

  • 同步 Derived Data。 rsync 一晚,兩邊索引隔天都怪。只同步 Git 管的檔案。
  • 沒 commit Package.resolved 遠端 resolve 不同版,本機綠燈、CI 紅燈。
  • 日常在 VNC 開發。 延遲加壓縮,改 UI 比本機痛苦。Preview 留本機小範圍。
  • 512GB 被 SPM 塞滿。 df -h 長期黃燈就升級或清 Archive,見 長期磁碟占用

機器怎麼選(只談編譯)

我現在是 M4、24GB、512GB。要上 ASC API、公司 proxy 白名單會要固定出口 IP一機一 IP)。

還沒上雲前想過的

14 吋 MBP: 編得快,但編譯時還是沒法順順寫 code。Xcode Cloud: PR 很省心;match、Fastlane 仍要自建機。黑蘋果 VM: 發版風險不想扛。

只有 Windows 筆電?Windows + 雲 Mac。亞太編輯、加拿大節點 build:Release/公證

常被問的

本機按 Run、遠端編譯? 不行,除非整個 Xcode 在 VNC。我遠端 build-for-testing,本機看 .xcresult

跨太平洋 SSH 延遲? build 在遠端跑,只等 log;約 200ms RTT 我可以接受。不要用 VNC 寫 code。

安全: 分發憑證別進個人筆電;builder 只開金鑰登入;別讓不可信 fork PR 跑 self-hosted。

構建機租哪裡

我的 build machine 放在 Hashvps Mac mini M4:平常 SSH,偶爾 VNC 點鑰匙圈;ASC 上傳要固定 IP。要找能 24/7 掛著編譯的機器,到 首頁看方案——比起自己搞二手 mini,我懶得重灌系統。

Hashvps

需要專用構建 Mac?

裸機 macOS、SSH/VNC,適合當 xcodebuild 副機。

查看方案
限時優惠