博客 · CI/CD

一个下午,在云端 Mac mini 上搭好 iOS CI/CD

把专属 Mac mini 作为 GitHub Actions 自托管运行器:构建更快、缓存常驻,也不再按分钟计费。

托管的 macOS 运行器很方便,但每个任务都从一台“冷”机器开始:Xcode 缓存、Swift 包和模拟器要反复下载。专属 Mac 会把这些都保留下来,因此当天的第二次构建通常比第一次快得多。

1. 准备 Mac

  1. 使用 Hatmac 账户中的信息通过 SSH 连接。
  2. 用 xcodes 或 App Store 安装项目所需的 Xcode 版本,然后运行 sudo xcodebuild -runFirstLaunch。
  3. 安装需要的命令行工具,例如 brew install fastlane swiftlint。

2. 注册运行器

在 GitHub 仓库中打开 Settings → Actions → Runners → New self-hosted runner,选择 macOS。GitHub 会显示该仓库专用的下载和 ./config.sh 命令。在 Mac 上运行它们,再把运行器安装为服务,重启后会自动启动:

./svc.sh install
./svc.sh start

3. 在工作流中使用

jobs:
  build:
    runs-on: [self-hosted, macOS]
    steps:
      - uses: actions/checkout@v4
      - run: xcodebuild -scheme App -destination 'platform=iOS Simulator,name=iPhone 16' test

4. 日常维护

  • 磁盘空间紧张时,定期清理 ~/Library/Developer/Xcode/DerivedData。
  • 把签名证书放在单独的钥匙串中,并在任务开始时解锁。
  • 每台 Mac 运行一个运行器,构建时间更可预期;队列变长时再增加一台。

需要多个运行器?很多团队用 Mac mini 处理日常构建,再用 Mac Studio 跑大规模测试矩阵。

GitHub ActionsXcodeCI/CDiOS