团队构建机 · 开工顺序

把一次代码推送,
接到机房里的 Mac

下单到第一次构建,一条线走完。先拿到整机,再验证连接、工具链与签名,最后把同一条命令交给 CI。

独享物理 Mac mini,非虚拟机。两档 Apple M4 整机,$19.2/天起,全年 365 天在线。

已有订单:在控制台领取连接信息,再从本页的首次登录步骤继续。

四个交接点,领到整机凭据

注册、配置、支付、分配各预留约 1 分钟,顺利时约 4 分钟走完开通流程。以下是操作预算,不是固定交付时限;邮件接收、支付确认与系统分配进度以控制台实际显示为准。

  1. 注册并进入控制台

    约 1 分钟

    准备可收取验证码的团队邮箱,按页面提示完成注册并设置密码。使用持续有人管理的邮箱,便于后续查订单、续费和跟进工单;不要把验证码转发到公开的构建日志。

  2. 确定机型、周期与节点

    约 1 分钟

    选择 Push M4 S 或 Push M4 L,再选计费周期及节点。单 App 日常 CI 可先评估 16GB 档,多 target 并行 archive 可评估 24GB 档;实际可用状态以控制台实时返回为准。

  3. 完成美元结算

    约 1 分钟

    选择 USDT-TRC20,或使用 Visa / Mastercard / Amex,经 Stripe 处理。以结账页返回的可用网关为准;链上转账需核对网络、地址与金额,等待控制台确认,不把已发起支付当作已开通。

  4. 接收整机与连接信息

    约 1 分钟

    系统分配整机后,在订单或实例详情核对节点、连接地址、端口和登录用户,领取 SSH/VNC 凭据。后续工单保留订单编号即可,不需要提供登录密码或私钥。

让交互靠近人,让构建靠近依赖

5 个节点均提供两档整机。先按日常操作构建机的成员位置缩小范围,再检查仓库、依赖源与产物存储之间的传输路径。时区方便交接,不等于网络延迟;VNC 操作与依赖下载应分别验证。

新加坡

东南亚成员为主时优先评估。把常用远程连接网络与依赖下载同时纳入试跑。

协作时区:UTC+8

东京

以日本工作日为主的团队可先评估。固定 runner 标签,避免任务误投到其他节点。

协作时区:UTC+9

首尔

韩国成员频繁操作桌面时可先评估。用实际办公网络检查图形界面响应。

协作时区:UTC+9

香港

面向华南与东南亚协作路径评估。远程桌面与 SSH 分工,日志留在构建系统。

协作时区:UTC+8

美国东部

北美白天需要交互操作时优先评估。跨区交接统一用 UTC 记录任务时间。

协作时区:UTC−5 / UTC−4

美国东部有季节性时差。若两地都需要频繁操作,可分别租用就近节点,再用 CI 队列协调任务;同一台整机的多个重任务仍需安排并发上限。

先通 SSH,再打开 macOS 桌面

连接地址、端口与用户都取自控制台,不套用其他订单的凭据。下面命令会提示你输入实际值;执行前先确认本机已具备 SSH 客户端。

SSH:验证命令行入口

在本地终端执行。首次连接核对主机指纹;若控制台未提供可核验信息,先通过工单确认,不直接忽略主机身份检查。

printf '连接地址:'
read -r MAC_HOST
printf 'SSH 端口:'
read -r MAC_PORT
printf '登录用户:'
read -r MAC_USER
ssh -p "$MAC_PORT" "$MAC_USER@$MAC_HOST"

登录后运行 whoami 和 sw_vers,确认用户及系统信息。后续配置 SSH 密钥时只上传公钥;私钥保留在你的设备或 CI 密钥管理中。

VNC:完成桌面侧检查

  1. 登录控制台,打开已交付实例的连接信息。
  2. 按实例给出的连接方式进入远程桌面,核对地址与认证信息。
  3. 进入 macOS 后检查键盘、显示与网络,按团队规则设置 VNC 密码。
  4. 完成 Xcode 初次启动提示与钥匙串相关授权,再回到 SSH 执行构建。

桌面用于处理图形界面授权,命令行用于执行可复现脚本。连接超时先核对端口、实例状态与本地网络,再提交工单;不要把反复修改密码当作网络排查。

留下一份可复现的 archive 回执

首次构建分为工具链、项目、签名、导出四项检查。命令示例适用于使用 workspace 的 iOS 项目;纯 project 项目应将 -workspace 改为 -project,并使用项目自己的文件名。

核对当前工具链

先看系统实际选中的 Xcode,而不是只看应用目录里安装了什么。多版本并存时,用项目约定的应用路径切换;切换后再次检查版本和 SDK。

xcode-select -p
xcodebuild -version
xcodebuild -showsdks
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

拉取仓库,找到共享 scheme

输入有读取权限的仓库地址,使用 SSH 密钥或安全的凭据管理方式认证,不把访问令牌拼进命令。先执行项目约定的依赖准备,再列出 workspace 与 scheme。

printf '仓库地址:'
read -r REPOSITORY_URL
git clone "$REPOSITORY_URL" app
cd app
git rev-parse HEAD
find . -name '*.xcworkspace' -prune
xcodebuild -list -workspace MyApp.xcworkspace

固定目录,执行 archive

将 MyApp.xcworkspace 与 MyApp 替换为上一项确认的真实名称。需要设备签名的构建,先安全导入匹配的证书与描述文件,并确认钥匙串可被构建进程访问。

mkdir -p build
xcodebuild \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -configuration Release \
  -destination 'generic/platform=iOS' \
  -derivedDataPath build/DerivedData \
  -archivePath build/MyApp.xcarchive \
  archive

用项目导出配置生成交付物

ExportOptions.plist 应来自项目既定的签名与分发配置,不能从其他团队照搬。archive 成功不代表导出成功;分别保留两个阶段的退出状态与日志。

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

test -d build/MyApp.xcarchive
find build/export -maxdepth 1 -type f -print

交接时记录四项,不记录密钥

记录提交 SHA、Xcode 版本、实际 scheme 与产物路径。首次失败先看第一个报错:依赖解析失败查网络与版本锁定,签名失败查证书和描述文件,导出失败查导出配置。不要在一次重试中同时改节点、工具链与签名设置。

把验证过的命令交给 CI 服务

先在同一个构建用户下手动跑通,再注册自托管 runner。持续在线解决的是机器供电与托管问题;runner 进程是否自启、证书是否有效、任务是否被队列阻塞,仍需团队配置和检查。

注册 runner,标记任务去向

从所用 CI 平台的项目或组织设置中获取 macOS ARM64 runner 安装指令。注册信息取自当前项目,不复用失效令牌;标签同时表达节点、架构与用途。

  • GitHub Actions:在 Self-hosted runners 中生成注册指令,检查仓库权限范围。
  • GitLab Runner:按项目给出的地址与令牌注册,为需要 Xcode 的任务选择相应执行方式。
  • 只让受信任的流水线访问签名资产,不在带密钥的整机上直接运行未审查代码。

第一次接入先只开一个构建任务。观察内存、磁盘与耗时,再决定并发;不要因为整机独享就把所有 archive 同时启动。

安装自启,检查后台服务

GitHub Actions runner 解压并完成注册后,可在其安装目录使用随包提供的服务脚本。以下不是下载或注册命令;须先按 CI 平台指令完成前一步。

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

确认服务脚本显示运行中,并在 CI 平台看到 runner 在线。若使用 LaunchAgent,通常依赖该用户登录会话;需要无人值守启动时,按 runner 官方支持方式配置并验证,不把“已安装服务”等同于“重启后一定可构建”。

最后一次验收:脱离当前终端仍能出包

关闭手动启动 runner 的终端,从 CI 发起一次受控任务。核对运行用户、所选 Xcode、钥匙串访问、缓存目录和产物上传。对计划用于无人值守的节点,再验证恢复后的 runner 状态;涉及重启时先确认没有其他任务运行。

独享整机可保留 DerivedData 与依赖缓存。缓存键至少区分工具链、依赖锁文件与构建配置;保留产物前设置清理规则,避免缓存增长占满系统磁盘。

下一次推送,沿用这份回执

连接与首包已验证,就把节点、工具链和构建命令写进团队交接记录。需要查版本切换与缓存细节,继续读指南;需要增加构建容量,先核对方案。