我平常用 16GB 的 MacBook Air 接案。寫 Swift 沒問題,一按 ⌘B 全專案編譯,風扇立刻吼、SourceKit 跟編譯器搶同一顆 SSD,游標會頓一下——這種時候其實寫不下去。買頂規 MacBook Pro 當然可以,但我真正要的是:編譯別佔著我唯一這台筆電。
試了幾輪之後,能長期用的組合很單純:輕薄筆電只改 code、推 Git;租一台雲端 Mac mini M4 專跑 xcodebuild。不是把整個 Xcode 掛在 VNC 裡寫一整天(跨太平洋延遲我試過,比本機還煩),遠端就是一台一直開著的 build machine。
先搞清楚:是編譯慢,還是索引在拖
活動監視器裡若是 swift-frontend、ld、XCBBuildService 吃滿 CPU,就是 build 在搞鬼;若 SourceKitService 長期偏高,丟遠端 build 幫助有限,先查 Derived Data 是否膨脹、build/ 有沒有被 commit 進去。我曾以為要加記憶體,清掉 40GB 舊 Derived Data 後,本機增量編譯就回來了——遠端 build 解的是「重活別在筆電跑」,不是萬靈丹。
Clean Build 越到後面越慢,也常是熱節流:前幾分鐘還行,後面降頻,會以為專案又變肥。把這類工作丟到機房的 M4,至少熱跟噪音不在桌上。
我的分工
- 本機: 改原始碼、
git commit、看 MR diff、偶爾單檔 Preview。不在 Air 上跑完整⌘U。 - 雲端 M4:
xcodebuild build、test、archive、exportArchive。憑證跟 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:
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。