若您在新加坡、日本、韓國、香港、美國東部、美國西部的專用遠端 Mac上以 Flutter 或 React Native 同時交付 iOS 與 Android,卻出現「單端穩、雙端一起就不穩」,根因多半是統一記憶體、SSD 寫入放大與 Gradle Daemon 策略未與租期台帳一起設計,而非核心數不足。本文提供痛點、對照表、六步可編排 Runbook、量化指標與租期判斷,並互鏈 Runner、混合 CI、Simulator、DerivedData、鄰近與出站等公開文。
Signal 9 或 Gradle transform 中斷呈現記憶體壓力。DerivedData、SwiftPM 快取爭用 SSD 預算。.gradle、.pub-cache、node_modules 未隔離會破壞稽核與重現性。請併讀 Simulator 與 DerivedData 容量、自架 Runner、Xcode Cloud 混合 CI;本文聚焦Android 與 Apple 工具鏈在同一台主機上的衝突。
三個預算:分頁壓力與 swap、SSD 剩餘空間與目錄增長、跨區套件與 egress 台帳。短租內觸紅線應先串行化與限並行,再談加 GHz。
| 情境 | M4(16GB 例) | M4 Pro | 紅線 |
|---|---|---|---|
| 僅 CLI | Gradle workers 2;Xcode 單 scheme 序列 | workers 3–4 | swap 連續上升;空閒 <10GB |
| Flutter integration + iOS Simulator | 先 Android 單元再 iOS UI;禁止 Daemon 全開 | 僅在 flutter drive 上限內交錯 | Metal+Java 令 SSH 凍結 |
| RN release + iOS archive | 時間盒;archive 前 ./gradlew --stop | 分離 GRADLE_USER_HOME 與 DerivedData | codesign 與 zipalign 同時 I/O 失敗 |
第一性原理:同機雙端常由統一記憶體與 SSD 寫入先封頂,而非核心數。
GRADLE_USER_HOME、PUB_CACHE 指到資料磁區,並與 DerivedData 可重現建置 對齊。android/.cxx → 輪替 DerivedData → 最後動 Git。./gradlew --stop || true export GRADLE_USER_HOME="$WORK_ROOT/.gradle-isolation" export ANDROID_SDK_ROOT="$WORK_ROOT/android-sdk" defaults write com.apple.dt.Xcode IDECustomDerivedDataLocation -string "$WORK_ROOT/DerivedData" export FLUTTER_ANALYZER_CONCURRENCY=2 export ORG_GRADLE_PROJECT_org.gradle.workers.max=2
Linux 分離可解耦 RAM 曲線,但金鑰與佇列雙份化;本機雙編譯則帶回不可稽核的目錄漂移。
若要在新加坡、日本、韓國、香港、美東、美西對齊 Git/Registry 熱路徑並腳本化 DerivedData 與 .gradle 水位,MACCOME Mac 雲主機(M4/M4 Pro 專用節點與彈性租期)通常較易先把記憶體與磁碟峰值壓下,再追編譯並行。
工具鏈矩陣、同機/拆機決策表、清理與租期科目對照;並與 Monorepo FinOps 劃清「Git 物件預算」與「雙端快取預算」。
若 Android 從不上 Mac,請回到 Runner 文。若已執行 出站 FinOps,請把 NDK、Hermes、Engine 快取納入同一 egress 台帳。
常見問題
同機雙端時一定要關 Gradle Daemon 嗎?
不必永久關閉,但流水線與互動工作階段結尾應執行 ./gradlew --stop 或強制閒置回收,短租尤然。請參考 租賃價格。
何時應拆成兩台機器?
若連續兩週回顧在串行化後仍反覆越紅線,或法遵要求隔離 Android 簽章與 iOS 憑證環境。請見 協助中心 · 雲端 Mac。