首页 / 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 M5 Pro
24GB · 512GB SSD
Pro 级 CPU 与 GPU,适合重度构建和小型模型。
低至 $229/月
- 6 个月$249/月
- 12 个月$229/月
Mac Studio M5 Max
36GB · 512GB SSD
高 GPU 吞吐量,适合机器学习、渲染和并行 CI。
低至 $679/月
- 6 个月$699/月
- 12 个月$679/月
价格为每台机器起始配置的美元月费。需要更多内存、存储或多台机器?联系我们。
安装多个 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。