2026年多仓库并行 Mac 构建:DerivedData、SwiftPM 与并发 xcodebuild 磁盘策略

多仓库并行时,xcodebuild 常在 SSD 上撞到「索引 + module 缓存 + SwiftPM 解析」的写放大峰值。先定 命中、隔离、水位 三档取舍,再谈并发度。资源池与远端 cache 分层见 企业 Mac CI 资源池选型;Runner 与持久卷分工见 GitHub Actions Cache 与本地磁盘 FAQ

一、DerivedData:共享固定路径还是「一 Job 一路径」

共享固定路径命中高、换分支友好,但并发写同一树易 race,坏缓存会串联污染。Job 级沙箱-derivedDataPath 指到独立目录,隔离最好、冷启动最贵。折中常用「按仓库哈希分桶」或只读预热层 + 可写 overlay,降低碰撞面。

口诀:要命中就分桶,要隔离就分路径;不要既共用根目录又开高并发。

二、SwiftPM 缓存键:复用边界在哪里

SwiftPM 全局缓存能缩短 resolve,键含 Xcode 版本、Package.resolved 与镜像源,多 Xcode 会抖命中。命名空间用 Xcode 大版本 + 仓库标识,同机多 Job 加前缀防解压撞车;远端 cache 与本地 SSD 分层前先算拉取与校验成本。

三、并发 xcodebuild 的磁盘峰值与清理档位

峰值可粗估为单 Job 峰值乘并行度,再加 Archive、dSYM。清理分三档:Job 结束删临时目录;日水位清不可用模拟器、旧 Archive 与日志;周维护漂移镜像或重建共享层。脚本须幂等并列出保留名单,勿误删只读预热。

  • 每档清理写 Owner 与回滚点。
  • 盯磁盘空闲与 I/O await,而非平均吞吐。
  • 压测「N 并行 × 最大仓」定水位阈值。

四、企业资源池对比 FAQ

  • 固定 DerivedData 一定更快吗?命中高时更快;并发写冲突或坏缓存时更慢。
  • SwiftPM 缓存能跨 Runner 共享吗?可以,但需一致的 Xcode 与解析镜像;否则用分桶 + 校验。
  • 云节点 vs 自建池?看峰值弹性与运维人力。
  • 清理太激进?命中掉、P95 变长,用前后指标对照。

在 Mac mini 上把多仓库构建跑顺

macOS 与 Xcode 行为一致,可压低本地与 CI 的温差;Mac mini Apple Silicon 的高带宽 SSD 利好多路索引与 SwiftPM 解压,待机约 4W 适合 7×24。Gatekeeper、SIP、FileVault 提升无人值守安全,TCO 常优于堆通用 PC。

验证独占节点与固定镜像,可看 Macstripe 首页Mac mini M4 仍是 2026 年扩容 CI 的高性价比起点;先跑通磁盘与缓存,再加并发。