SSH:适合重复执行的任务
用于 xcodebuild 编译与测试、runner 注册和日志检查,以及 scp、rsync 文件同步。构建日志是文本,不需要持续传输桌面画面。
- 把依赖安装、测试与归档写入流水线,减少手工点击。
- 检查 runner 进程、工作目录、剩余磁盘与失败日志。
- 用服务管理 runner,避免将长期任务绑在一次 SSH 会话上。
适用阶段:PR 校验、nightly 构建、批量打包与产物同步。
一台独享 Mac · 两条接入路径
命令行与图形桌面接入同一台物理 Mac mini。让 runner 持续执行任务,需要检查 Xcode、模拟器或证书配置时,再打开屏幕共享。
Apple Silicon M4 · 两档配置 · $20/天起。整机只分配给一个客户,非虚拟机。
任务继续跑,桌面按需开
共享同一份工程、磁盘与工具链,不是两台需要重复配置的机器。桌面操作同样会占用整机资源。
先分工,再连接
两种方式可以并存。选择接入方式的依据是任务是否需要图形界面,而不是是否有人坐在电脑前。
用于 xcodebuild 编译与测试、runner 注册和日志检查,以及 scp、rsync 文件同步。构建日志是文本,不需要持续传输桌面画面。
适用阶段:PR 校验、nightly 构建、批量打包与产物同步。
用于 Xcode 图形界面、模拟器操作、钥匙串与证书配置。macOS 自带屏幕共享或兼容的 VNC 客户端均可作为连接工具。
适用阶段:环境初始化、图形排错与发布前人工检查。
首次连接
登录控制台,打开对应实例详情。地址、用户名、端口与认证方式都使用实例实际显示的值,不把 SSH 端口直接当成 VNC 端口。
核对实例 ID 与节点,分别记录 SSH 和 VNC 的连接信息。首次连接前确认实例已可用;若控制台尚未返回凭据,保留订单信息并通过控制台工单查询,不要反复猜测地址或密码。
使用实例提供的端口和用户名连接。首次出现主机指纹提示时先核对;如果同一地址的指纹突然变化,应停止连接并确认实例是否重新分配。
ssh -p "$SSH_PORT" "$MAC_USER@$MAC_HOST"
sw_vers
uname -m
xcode-select -p
df -h
先在本地终端设置变量为控制台实际值。连接成功后检查 macOS、架构、开发者目录与磁盘空间。
在本地 macOS 打开“屏幕共享”,输入实例提供的 VNC 地址与端口;其他系统使用兼容客户端。按实例认证方式登录,先确认能看见桌面和操作鼠标,再打开 Xcode。连接失败时依次核对地址、端口、认证信息与本地网络限制。
首次登录后按实例支持的方式更新初始凭据,为团队成员分别管理 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 工程检查、编译归档、模拟器测试与证书配置,都在远端 macOS 环境内执行。SSH 与 VNC 看见同一份文件,注意避免手动修改正在被 runner 使用的工作目录。
本地连接的 iPhone 不会因为开启 VNC 就出现在云端 Xcode 中。真机测试需要单独安排设备可达性与测试流程;可以先在云端产出签名构建,再按团队既有分发流程交给测试设备。
工程、缓存与产物分别管理
仓库负责版本历史,文件同步负责工作副本与产物。证书、私钥和令牌不要混在普通工程目录里传输;上传前先检查忽略规则和目标路径。
适合明确的一份归档或资源包。下面从远端下载已生成的压缩包;远端目录与文件名需要替换为实际路径。
scp -P "$SSH_PORT" \
"$MAC_USER@$MAC_HOST:build/ios-build.zip" \
./ios-build.zip
scp 的端口参数是大写 -P。完成后核对文件大小;需要验证内容一致性时,再比较两端校验和。
适合反复同步同一目录。首次先预演,确认目标路径和排除项;末尾的斜杠表示同步目录内容。
rsync -avn \
-e "ssh -p $SSH_PORT" \
--exclude '.git/' \
--exclude 'DerivedData/' \
./project/ "$MAC_USER@$MAC_HOST:project/"
确认预演输出后,将 -avn 改为 -av 执行。这里没有使用删除参数,避免将本地缺少的文件直接从远端移除。
先定接入位置,再跑第一条任务
交互开发看办公网络,持续构建看仓库与产物位置。下单时选择节点,实际可用状态以控制台实时返回为准。