首页 / Xcode 构建服务器

Xcode 构建服务器

Xcode 构建服务器是一台无需人值守、自动编译、归档和签名应用的 Mac。Hatmac 为你提供独享的 Mac mini 或 Mac Studio 来运行它,带完整终端和管理员权限。

一台好的 Xcode 构建服务器需要什么

Xcode 只能在 macOS 上运行,而 Apple 平台的构建离不开它。可靠的构建服务器需要四样东西:并存安装的合适 Xcode 版本、在构建之间保留的缓存、随时可用的模拟器运行时,以及从源码到签名、公证产物的脚本化流程。本页逐一说明,并附上可直接使用的命令。

如果还没选定 CI 系统,可以先看 macOS CI/CD 运行器概览。

Mac mini M6

最受欢迎

24GB · 512GB SSD

更大内存与存储,适合大型项目和缓存。

低至 $179/月

  • 月付$209/月
  • 6 个月$199/月
  • 12 个月$179/月
订购 Mac mini M6

Mac mini M5 Pro

24GB · 512GB SSD

Pro 级 CPU 与 GPU,适合重度构建和小型模型。

低至 $229/月

  • 6 个月$249/月
  • 12 个月$229/月
订购 Mac mini M5 Pro

Mac Studio M5 Max

36GB · 512GB SSD

高 GPU 吞吐量,适合机器学习、渲染和并行 CI。

低至 $679/月

  • 6 个月$699/月
  • 12 个月$679/月
订购 Mac Studio M5 Max

价格为每台机器起始配置的美元月费。需要更多内存、存储或多台机器?联系我们。

安装多个 Xcode 版本

大多数团队新功能用最新 Xcode,维护分支用上一个版本。开源的 xcodes 命令行工具可以并存安装多个版本,首次使用时会要求登录 Apple 账户。

brew install xcodesorg/made/xcodes aria2
xcodes install --latest
xcodes install 26.0
xcodes installed
xcodes select 26.0
sudo xcodebuild -license accept
sudo xcodebuild -runFirstLaunch

xcodes select 会切换系统默认版本,作用与 xcode-select -s 相同。如果只想为单个任务指定版本,可以设置 DEVELOPER_DIR。具体的应用路径可用 xcodes installed 查看。

# per job, without changing the system default
export DEVELOPER_DIR="/Applications/Xcode-26.0.0.app/Contents/Developer"
xcodebuild -version

每个 Xcode 加上模拟器运行时可能占用几十 GB,需要两三个版本时,选择 512GB 方案更稳妥。

缓存 DerivedData 与 Swift 包

Xcode 默认按工作区路径区分 DerivedData,CI 检出目录一旦变化,缓存就会失效。为每个项目指定固定路径,增量构建才能生效,依赖包也能复用。

xcodebuild build \
  -scheme MyApp \
  -destination 'generic/platform=iOS Simulator' \
  -derivedDataPath "$HOME/ci-cache/DerivedData/MyApp" \
  -clonedSourcePackagesDirPath "$HOME/ci-cache/SourcePackages" \
  -skipPackagePluginValidation
  • 提交 Package.resolved,固定依赖版本。
  • 切换 Xcode 版本后清理该项目的 DerivedData,混用缓存容易引发奇怪的错误。
  • 加一个每周清理任务,删除旧的 DerivedData 和归档,避免磁盘写满。

归档与导出

发布构建使用通用设备目标进行归档,再用 ExportOptions.plist 导出,其中设置导出方式(例如 app-store-connect、release-testing 或 developer-id)、团队 ID 和签名方式。

xcodebuild archive \
  -scheme MyApp -configuration Release \
  -destination 'generic/platform=iOS' \
  -archivePath build/MyApp.xcarchive

xcodebuild -exportArchive \
  -archivePath build/MyApp.xcarchive \
  -exportOptionsPlist ExportOptions.plist \
  -exportPath build/export

在无界面的 Mac 上签名,需要证书位于已解锁的钥匙串中。证书、描述文件和 fastlane match 的详细做法见 iOS 构建服务器页面。

模拟器

较新的 Xcode 版本会单独下载模拟器运行时。在服务器上提前装好,测试任务就不用等待下载。

xcodebuild -downloadPlatform iOS
xcrun simctl list runtimes
xcrun simctl list devices available
xcrun simctl delete unavailable

按名称和系统版本指定测试目标,例如 -destination 'platform=iOS Simulator,name=iPhone 17,OS=latest';升级 Xcode 后删除不可用的设备。

用 notarytool 公证 Mac 应用

在 Mac App Store 之外分发的 Mac 应用需要 Developer ID 签名和公证。notarytool 已取代旧的 altool 流程。先把 App Store Connect API 密钥保存到钥匙串,之后在流水线中提交并装订(staple)。

xcrun notarytool store-credentials "ci-notary" \
  --key AuthKey_ABC123.p8 --key-id ABC123 --issuer "$ASC_ISSUER_ID"

ditto -c -k --keepParent MyApp.app MyApp.zip
xcrun notarytool submit MyApp.zip --keychain-profile "ci-notary" --wait
xcrun stapler staple MyApp.app

完整要求(包括强化运行时)请参阅 Apple 的公证文档。

选择哪台 Mac

  • Mac mini M6,24GB / 512GB:最受欢迎的方案,适合一两个应用、两个 Xcode 版本的常规场景。
  • Mac mini M5 Pro,24GB / 512GB:适合代码库较大、在意全量构建时间的项目。
  • Mac Studio M5 Max,36GB / 512GB:适合大型模块化项目、多个并行模拟器,或由较大团队共用的服务器。

如需更大存储,可按需提供,请告诉我们你的需求。完整流程示例请阅读在云端 Mac mini 上做 iOS CI/CD。

常见问题

可以在构建服务器上安装 Xcode 测试版吗?

可以。你拥有完整的管理员权限,可以用 xcodes 或从 Apple 下载测试版,与正式版并存,并通过 DEVELOPER_DIR 按任务切换。

Xcode 构建服务器需要多大磁盘?

每个 Xcode 版本加模拟器运行时大约要几十 GB,再加上 DerivedData 和归档文件。512GB 适合大多数团队,更大存储可按需提供。

公证需要另外一台 Mac 吗?

不需要。同一台 Xcode 构建服务器就能在构建流程中用 notarytool 完成签名、公证和装订。

这是虚拟 Mac 吗?

不是。每台 Hatmac 机器都是分配给单一客户的独享物理 Mac。