1–5 分鐘交付

重編譯放雲端
本地 Mac 不搶風扇

$21.1 / 天起 · 實體機獨享
線上租借 Mac
M4 10 核 16 GB 無 swap

Xcode 編譯速度對比:MacBook 與雲端 Mac mini M4 實測

改了一行 Swift 程式碼,增量編譯 20 秒就過了——但發版前那次 Clean Build 才是機器真正的底牌。 我們把同一份 SwiftUI 專案分別丟進 MacBook Air M2、MacBook Pro M1 Pro 和 PixVPS 獨享 Mac mini M4, 用同一套 xcodebuild 腳本跑 Debug 全量編譯與 Release Archive, 記錄牆鐘耗時、記憶體 swap、機身溫度與風扇轉速,看看「筆電扛全量」和「桌面 M4 扛全量」差在哪裡。

為什麼全量編譯比增量更能說明機器上限

日常開發裡,Xcode 的增量建置掩蓋了大量硬體差異:改一個檔案、只重編幾個 target, 8 GB 的 MacBook Air 和 16 GB 的 Pro 看起來「都能用」。 但 merge 進主分支、CI 觸發 Clean Build,或者本地執行 xcodebuild clean build 驗證 Release 配置時, 編譯器會同時拉起所有 Swift 模組、跑全量型別檢查、連結全部 Extension—— 這才是記憶體、散熱與 CPU 持續負載的真正考場。

我們收到過不少獨立開發者的回饋:「筆電編到一半風扇狂轉,Simulators 卡死,Slack 都切不動。」 問題往往不在 Xcode 版本,而在全量建置把機器推到持續高負載, 而筆電的散熱與統一記憶體容量是為行動場景設計的,不是為 5–10 分鐘不間斷編譯設計的。 這篇對比聚焦「同一專案、同一命令、不同機器」的牆鐘差異, 幫你判斷:是升級本地硬體,還是把重編譯挪到雲端獨享節點更划算。

本次實測環境

樣例專案:SwiftUI 中型 App(約 11.8 萬行 Swift/ObjC,含 Widget、Share Extension、Notification Service Extension 共 3 個 Extension target),CocoaPods + 本地 Swift Package 依賴 14 個。
工具鏈:macOS 15 Sequoia,Xcode 16.4,-jobs 10 並行編譯(與 M4 物理核數對齊)。
對照機 A:MacBook Air M2 · 8 GB · 256 GB · 無風扇(2022 款)。
對照機 B:MacBook Pro 14" M1 Pro · 16 GB · 512 GB(2021 款,接電源)。
雲端機:PixVPS Mac mini M4 · 10 核 · 16 GB · 256 GB NVMe · 1 Gbps 獨享頻寬(日本東京節點)。
每項測試重複 3 次取中位數;每次前執行 rm -rf ~/Library/Developer/Xcode/DerivedData/* 確保冷啟動。

統一測試方法:避免「各編各的」

對比編譯速度最容易犯的錯,是讓三台機器處於不同狀態——一台開著 Chrome 四十個分頁,另一台剛重啟, 第三台還留著上週的 DerivedData。我們固定了以下基線,保證數字可橫向比較:

  1. 01
    同一 Git commit

    三台機器均 git checkout v2.4.0-buildbench,鎖定依賴版本與 Package.resolved,避免 SPM 解析時間干擾。

  2. 02
    命令列建置,關閉 GUI

    不透過 Xcode 介面點 Product → Build,統一用 xcodebuild 並配合 /usr/bin/time -l 採集牆鐘與峰值記憶體。

  3. 03
    模擬「真實桌面」背景負載

    本地 MacBook 額外執行:Slack、Chrome(8 分頁)、Simulators 未啟動。雲端 M4 僅跑 SSH 工作階段與建置腳本,模擬無人值守 CI 環境。

  4. 04
    兩類建置各測一輪

    Debug clean build(開發驗錯)與 Release archive(發版路徑),分別記錄耗時與 swap 頁數。

Debug 建置命令範例: xcodebuild -workspace MyApp.xcworkspace -scheme MyApp -configuration Debug clean build -destination 'generic/platform=iOS' -jobs 10。 計時從命令送出到 ** BUILD SUCCEEDED ** 輸出為止,不含 pod install 與證書匯入。

Clean Build 牆鐘耗時:M4 與兩代 MacBook

Debug 全量編譯的中位數結果如下。M4 雲端節點比 M1 Pro 本地機快約 15%, 比 M2 Air 快一倍還多——差距主要來自 M2 Air 在第三分鐘觸發記憶體壓縮與 swap, 編譯後期 CPU 頻率因過熱從 3.4 GHz 降到約 2.6 GHz。

3m 41s M4 雲端 Debug Clean Build
4m 18s M1 Pro 16 GB
7m 09s M2 Air 8 GB
3m 52s M4 Release Archive
機器 Debug Clean Build Release Archive 峰值記憶體佔用 是否觸發 swap
Mac mini M4(PixVPS 獨享) 3m 41s 3m 52s 12.4 GB
MacBook Pro M1 Pro 16 GB 4m 18s 4m 56s 14.8 GB 輕微(< 200 MB)
MacBook Air M2 8 GB 7m 09s 8m 47s 7.9 GB + 3.2 GB swap

Release Archive 的差距比 Debug 更明顯:最佳化級別更高、連結階段更吃記憶體。 M2 Air 在 Archive 時 swap 峰值達到 4.1 GB,牆鐘時間接近 9 分鐘; 同一專案在 M4 上全程未突破 16 GB 物理記憶體,編譯曲線平穩,沒有「後期突然變慢」的拐點。 若你的發版流程每週至少一次全量 Archive,這個差距會直接轉化成等待成本與筆電可用性成本。

增量編譯:日常體感與全量結論為何不同

為完整呈現開發體驗,我們額外測了「修改單個 Swift 檔案後增量建置」—— 這是你在 IDE 裡按 Cmd+B 最常見的路徑。三台機器差距顯著縮小: M4 雲端 17 秒,M1 Pro 22 秒,M2 Air 38 秒(背景 Chrome 仍開著)。 增量建置只重編受影響模組,記憶體峰值不超過 5 GB,M2 Air 也不會 swap。

這意味著:如果你 90% 的時間在做小步迭代,本地 8 GB Air 完全夠用; 痛點集中在發版週、依賴大升級、或切換分支後的首次全量編譯。 很多團隊把「日常編碼留在本地、全量建置丟給 CI」—— 但若 CI 跑在 GitHub 代管 Runner 上,排隊時間往往比編譯本身還長(高峰 20 分鐘以上), 體感並不比本地 Air 更好。固定一台雲端 M4 獨享機跑全量,是介於「本地硬扛」與「公共佇列」之間的第三條路。

DerivedData 快取的槓桿效應

保留 DerivedData 後第二次 Debug 全量建置,M4 可降至 2m 14s,M1 Pro 降至 2m 48s。 雲端節點適合長期保留快取;本地 Air 若磁碟只剩 20 GB,常被迫清快取,反而更頻繁遭遇「冷啟動全量」。 需要大容量可選購 SSD +1TB 擴容($2.9/天起),把多版本 Xcode 與快取一併放在雲端。

發熱、風扇與「編譯時能不能幹別的」

編譯不只是碼錶問題,還影響並行工作流。我們在全量建置進行中記錄機身溫度與風扇轉速(M4 mini 透過外接溫感,筆電用內建感測器):

機器 建置第 3 分鐘鍵盤/機身溫度 風扇轉速 / 噪音 同時開 Simulators 除錯
Mac mini M4(雲端) 外殼約 38°C 風扇幾乎不轉,< 25 dB 可另開模擬器(SSH 遠端觀察)
MacBook Pro M1 Pro 鍵盤面約 44°C 約 3200 RPM,可聞但不刺耳 能開,但 UI 明顯卡頓
MacBook Air M2 8 GB 鍵盤面約 47°C 無風扇,機身燙手,降頻 不建議,Simulators 常崩潰

M2 Air 無風扇設計在持續編譯場景下會主動降頻保護晶片—— 前 2 分鐘速度與 M1 Pro 接近,後 3 分鐘越拉越慢,這就是 7 分鐘總耗時的隱形來源。 雲端 Mac mini 是桌面散熱形態,M4 的 10 效能核可以長時間維持在高頻, 對你而言意味著:把全量編譯丟到 SSH 工作階段裡背景跑,本地 Windows 或 Linux 主力機繼續寫程式、開會、刷文件,互不干擾。

16 GB 統一記憶體:夠用與不夠用的分界線

本次專案的 Debug 全量建置峰值約 12.4 GB,落在 16 GB 機器的舒適區內。 當專案膨脹到 20 萬行以上、或同時開啟 Xcode + Simulators + Instruments 時, 16 GB 本地機也會踩線——我們在同一 M1 Pro 上疊加 iOS 17 模擬器跑 UI 測試, 峰值達到 15.6 GB 並出現 800 MB swap,全量編譯時間從 4m 18s 拉長到 5m 44s。

M2 Air 的 8 GB 則在編譯開始後 90 秒就觸及記憶體上限,系統開始積極壓縮與換頁。 memory_pressure 日誌裡出現大量 vm_compressor 事件, 編譯執行緒等待記憶體釋放,牆鐘時間被拉長近一倍。 這不是 Xcode「最佳化差」,而是物理記憶體硬頂—— 雲端 M4 的 16 GB 對多數中型 iOS 專案是「不 swap 的最低配」, 而不是過剩配置。

虛擬化 macOS 不能代表本次資料

部分雲廠商提供的是虛擬化 macOS 或超售宿主機,編譯時與其他租戶搶 CPU,全量建置耗時會隨鄰居負載波動 30% 以上。 PixVPS 是獨享實體 Mac mini M4,不做虛擬化、不超售——本次三輪測試的標準差在 4 秒以內,可作為穩定基線參考。

重現實測:腳本與計時注意點

你可以用下面最小腳本在自己的機器與雲端節點各跑一遍,結果寫入 CSV 方便對比。 在專案根目錄儲存為 scripts/bench_clean_build.sh

#!/bin/bash
set -euo pipefail
SCHEME="MyApp"
WORKSPACE="MyApp.xcworkspace"
rm -rf ~/Library/Developer/Xcode/DerivedData/*
/usr/bin/time -l xcodebuild -workspace "$WORKSPACE" -scheme "$SCHEME" -configuration Debug clean build -destination 'generic/platform=iOS' -jobs "$(sysctl -n hw.ncpu)" 2>&1 | tee /tmp/xcode_bench.log
grep -E 'real|maximum resident set size' /tmp/xcode_bench.log

注意事項:首次在新機器上建置前先跑一遍 xcodebuild -runFirstLaunch; 確保 xcode-select -p 指向預期 Xcode; 計時期間不要手動開啟 Xcode GUI(會搶占 SourceKit 與索引程序); 若對比雲端,透過 SSH 執行腳本,用 caffeinate -dims 防止合蓋休眠(筆電本地測試同樣適用)。 遠端桌面(VNC)僅用於觀察進度,不建議在 VNC 裡開 Xcode GUI 同時測命令列建置——圖形工作階段會額外佔用 1–2 GB 記憶體。

什麼時候把全量編譯挪到雲端 M4

升級本地 MacBook 到 M4 Pro 32 GB 要數千美元,而一年發版高峰可能只占幾十天。 若你的痛點是「每週一兩次全量 Archive 讓筆電燙到沒法放腿上」,而非「每次儲存都要等 30 秒」, 按天租用雲端獨享 M4 往往更經濟:$21.1/天、$57.1/週、$105.7/月,無合約鎖定, 付款後 1–5 分鐘開通,SSH 與瀏覽器 VNC 雙連線。

PixVPS 五地節點——新加坡、日本(東京)、韓國(首爾)、中國香港、美國東部——硬體同價; 台灣或港澳開發者連東京或新加坡節點 SSH 全量編譯,牆鐘與本地幾乎一致,只是把發熱與噪音留在機房。 可與 GitHub Actions 自架 Runner 或 Fastlane 腳本配合:本地 push 觸發雲端 xcodebuild archive, 編完傳回 .ipa 或直傳 TestFlight(流程細節見本站雲端 Mac Xcode CI/CD 實戰指南)。

另一種常見用法:主力機是 Windows,偶爾接 iOS 外包——不必為每月一兩次編譯買 MacBook, 發版週租兩天雲端 M4,裝 Xcode 與證書,完事即釋。16 GB 統一記憶體、1 Gbps 獨享頻寬、99.9% SLA, 7×24 真人支援,工單 1 小時內回覆。需要更大專案快取可加購 SSD +1TB($2.9/天); 多 App 夜間矩陣建置可參閱 Thunderbolt 5 並聯方案($1.9/天起,80 Gbps 多機互聯)。

你的情況 建議 雲端 M4 角色
M2 Air 8 GB,月全量 < 4 次 發版日按天租雲端機 臨時編譯站,避免 swap
M1/M2 Pro 16 GB,日常夠用、發版週嫌慢 發版週把 Archive 丟雲端 本地寫程式,雲端跑重編譯
無 Mac,接 iOS 外包 按週租用 + VNC 除錯 完整 Xcode 環境,用完即釋
每天多次全量 CI 常駐雲端 M4 Runner 按月 $105.7,不排隊

全量編譯測的不是「誰的晶片跑分高」,而是誰能穩定、可預期地在 5 分鐘內交卷且不犧牲並行工作流。 本地 MacBook 仍是最好的日常編碼終端;雲端 M4 獨享節點則是把「編譯高峰」從筆電上卸下來的專用算力—— 按天計費,不必為一年用幾十天的峰值買整機。

實體機獨享 · 1–5 分鐘交付

把 Xcode 全量編譯挪到不搶風扇的 M4 節點

PixVPS Mac mini M4 獨享實體機:10 核 CPU、16 GB 統一記憶體、 Debug 全量編譯約 3 分 40 秒,全程無 swap。SSH / VNC 連線,按天 $21.1 起。

標準配置
晶片Apple M4 · 38 TOPS
CPU10 核獨享
記憶體16 GB 統一
頻寬1 Gbps 獨享
SLA99.9%
交付1–5 分鐘