一台独享 Mac · 两条接入路径

SSH 跑构建,
VNC 开 Xcode

命令行与图形桌面接入同一台物理 Mac mini。让 runner 持续执行任务,需要检查 Xcode、模拟器或证书配置时,再打开屏幕共享。

Apple Silicon M4 · 两档配置 · $20/天起。整机只分配给一个客户,非虚拟机。

团队专属泳道

任务继续跑,桌面按需开

SSH自动化路径
  1. 同步工程
  2. 执行测试
  3. 归档产物
VNC交互检查路径
  1. 打开 Xcode
  2. 检查模拟器
  3. 确认签名

共享同一份工程、磁盘与工具链,不是两台需要重复配置的机器。桌面操作同样会占用整机资源。

先分工,再连接

自动化留在命令行,交互检查交给桌面

两种方式可以并存。选择接入方式的依据是任务是否需要图形界面,而不是是否有人坐在电脑前。

SSH:适合重复执行的任务

用于 xcodebuild 编译与测试、runner 注册和日志检查,以及 scp、rsync 文件同步。构建日志是文本,不需要持续传输桌面画面。

  • 把依赖安装、测试与归档写入流水线,减少手工点击。
  • 检查 runner 进程、工作目录、剩余磁盘与失败日志。
  • 用服务管理 runner,避免将长期任务绑在一次 SSH 会话上。

适用阶段:PR 校验、nightly 构建、批量打包与产物同步。

VNC:适合需要看见界面的任务

用于 Xcode 图形界面、模拟器操作、钥匙串与证书配置。macOS 自带屏幕共享或兼容的 VNC 客户端均可作为连接工具。

  • 检查工程 target、构建设置与签名配置的实际状态。
  • 打开模拟器复现 UI 问题,确认运行时和设备类型。
  • 处理需要交互确认的配置,再把可重复步骤写回脚本。

适用阶段:环境初始化、图形排错与发布前人工检查。

首次连接

凭据核对一次,两条路径分别验证

登录控制台,打开对应实例详情。地址、用户名、端口与认证方式都使用实例实际显示的值,不把 SSH 端口直接当成 VNC 端口。

  1. 01

    领取实例凭据

    核对实例 ID 与节点,分别记录 SSH 和 VNC 的连接信息。首次连接前确认实例已可用;若控制台尚未返回凭据,保留订单信息并通过控制台工单查询,不要反复猜测地址或密码。

  2. 02

    验证命令行接入

    使用实例提供的端口和用户名连接。首次出现主机指纹提示时先核对;如果同一地址的指纹突然变化,应停止连接并确认实例是否重新分配。

    ssh -p "$SSH_PORT" "$MAC_USER@$MAC_HOST"
    sw_vers
    uname -m
    xcode-select -p
    df -h

    先在本地终端设置变量为控制台实际值。连接成功后检查 macOS、架构、开发者目录与磁盘空间。

  3. 03

    打开屏幕共享

    在本地 macOS 打开“屏幕共享”,输入实例提供的 VNC 地址与端口;其他系统使用兼容客户端。按实例认证方式登录,先确认能看见桌面和操作鼠标,再打开 Xcode。连接失败时依次核对地址、端口、认证信息与本地网络限制。

  4. 04

    收紧访问权限

    首次登录后按实例支持的方式更新初始凭据,为团队成员分别管理 SSH 密钥,不把密码写入仓库。runner 使用最小权限的注册令牌;凭据、证书与私钥放在受控的密钥管理流程内。完成一次最小构建后,再启用正式流水线。

5 个节点 · 网络参考

桌面看往返,构建看数据路径

VNC 的点击反馈受往返延迟影响;持续构建更要关注仓库、依赖源和产物存储的位置。以下区间是节点参考,不是从你当前位置测得的结果,也不是连接时延保证。

节点、辐射区与参考往返区间;按主要工作方式评估接入位置
节点 辐射区 参考往返区间 适合的工作方式
新加坡 东南亚 20~50ms 东南亚团队交互开发;同时核对仓库与依赖下载路径。
日本(东京) 东亚 30~60ms 东亚成员操作 Xcode;runner 与产物存储尽量就近。
韩国(首尔) 东北亚 30~50ms 东北亚团队查看模拟器、远程排错与同步工程。
香港 华南与东南亚 20~40ms 华南与东南亚成员进行屏幕共享和日常构建操作。
美国东部 北美东部与西欧 25~35ms 面向该辐射区的团队协作;结合代码与产物位置选点。

区间参考,实际以接入网络为准。

先从常用办公网络完成一次桌面操作、一次依赖拉取和一次产物上传。分别记录交互感受、传输耗时与构建耗时,不把三者合成一个“机器快慢”的结论。

先降画面负载,再查链路

把带宽留给当前任务

画面设置从够用开始。远程画面越大、变化越频繁,编码与传输开销就越高;调整桌面不会让编译器少做工作,但能减少交互时的等待。

分辨率按工作区收口

以 1440 × 900 或 1600 × 900 作为起步设置,先保证能完整阅读编辑器与日志。只有确实需要更多面板时再提高分辨率,不默认传输高分辨率全屏。

每次只改一项,对比文字清晰度与拖动窗口的响应。

色深与质量按客户端调整

若客户端提供色深、质量或压缩选项,低带宽时先降低画面质量。代码阅读保留文字可辨识度,避免播放视频或持续刷新无关窗口。

不同客户端选项名称不同,以实际可用设置为准。

无需交互时关闭观看

大文件同步或弱网环境下,用 SSH 查看文本日志,把构建交给已配置为服务的 runner。不要依赖图形终端窗口维持长期任务,先确认任务脱离交互会话也能运行。

检查完成后断开桌面连接,不执行系统退出登录或关机。

Xcode远程开发的边界

桌面负责确认,流水线负责复现

把人工检查变成可追踪的环境变更:记录 Xcode 版本、模拟器运行时与签名设置,随后用同一份工程在命令行验证。不要只留下“在桌面里点过一次”的配置。

远程开发工作区中的电脑与桌面设备,用于说明从本地工作台访问云端 Xcode 的工作方式
远程开发工作区示意。屏幕共享传输的是云端桌面,不会把本地外设自动接到远端机器。

可在云端完成

Xcode 工程检查、编译归档、模拟器测试与证书配置,都在远端 macOS 环境内执行。SSH 与 VNC 看见同一份文件,注意避免手动修改正在被 runner 使用的工作目录。

真机调试另行安排

本地连接的 iPhone 不会因为开启 VNC 就出现在云端 Xcode 中。真机测试需要单独安排设备可达性与测试流程;可以先在云端产出签名构建,再按团队既有分发流程交给测试设备。

工程、缓存与产物分别管理

小文件直接传,重复同步走增量

仓库负责版本历史,文件同步负责工作副本与产物。证书、私钥和令牌不要混在普通工程目录里传输;上传前先检查忽略规则和目标路径。

scp:传一次构建产物

适合明确的一份归档或资源包。下面从远端下载已生成的压缩包;远端目录与文件名需要替换为实际路径。

scp -P "$SSH_PORT" \
  "$MAC_USER@$MAC_HOST:build/ios-build.zip" \
  ./ios-build.zip

scp 的端口参数是大写 -P。完成后核对文件大小;需要验证内容一致性时,再比较两端校验和。

rsync:同步工程工作副本

适合反复同步同一目录。首次先预演,确认目标路径和排除项;末尾的斜杠表示同步目录内容。

rsync -avn \
  -e "ssh -p $SSH_PORT" \
  --exclude '.git/' \
  --exclude 'DerivedData/' \
  ./project/ "$MAC_USER@$MAC_HOST:project/"

确认预演输出后,将 -avn 改为 -av 执行。这里没有使用删除参数,避免将本地缺少的文件直接从远端移除。

先定接入位置,再跑第一条任务

选一个离你最近的节点

交互开发看办公网络,持续构建看仓库与产物位置。下单时选择节点,实际可用状态以控制台实时返回为准。