接入工作站

从 Windows 连 Mac

VNC 看桌面,SSH 跑构建。

继续在 Windows 或 Linux 上写代码。需要编译 iOS 工程时,再把项目传到独享的 macOS 环境。

已有订单?登录控制台,在实例详情中查看连接字段。不要把密码或私钥放进项目仓库。

XCODEHOST / ACCESS 按租期接入

核对连接借用卡

从控制台读取字段,按连接方式分别填写。

VNC 桌面
地址 · VNC 端口 · 密码
SSH 构建
地址 · SSH 端口 · 用户名 · 密钥
SFTP 传输
沿用 SSH 接入字段
.ipa

传入工程 → 编译导出 → 下载产物

分配任务

把桌面、命令和文件分开

三种方式接入同一台机器,不需要为每项任务另租实例。先决定要做什么,再打开对应客户端。

用 VNC 查桌面

适合首次检查环境、操作 Xcode 图形界面,以及查看签名设置。客户端显示远端 macOS 桌面,鼠标和键盘操作作用在云端机器上。

开始时先用较低分辨率。确认输入、画面和连接稳定后,再按需要调整显示质量。

图形操作

用 SSH 跑构建

适合执行 Flutter、React Native、Unity 导出工程的编译命令,也适合查看日志。命令在远端运行,不依赖持续传输桌面画面。

普通 SSH 会话断开可能影响前台任务。长构建应使用任务会话工具,或交给已配置的构建执行器。

命令执行

用 SFTP 传工程

适合上传源码、资源包与配置文件,或下载构建日志和 .ipa。SFTP 使用 SSH 接入信息,不要误填 VNC 端口。

首次传入前先清理可重建缓存。证书与私钥单独传输,产物下载后核对文件大小与构建版本。

工程交接

设置 Windows

先填对 VNC 的三个字段

准备兼容 VNC 的客户端,再打开控制台中的实例详情。连接信息以该实例显示的内容为准,不猜地址、不套默认端口。

  1. 01

    填地址

    把实例的连接地址填入客户端的主机栏。地址、用户名与订单编号是不同字段,不要把整段连接说明一起粘贴进去。

    客户端若把地址和端口合在一个输入框,先核对它要求的语法;不同客户端对冒号写法的解释可能不同。

  2. 02

    填端口

    使用控制台给出的 VNC 端口。SSH 与 VNC 是两个服务,端口不能互换;有单独端口栏时,把数字填写在该栏。

    遇到连接超时,先检查复制时是否带入空格、当前网络是否限制该端口,以及实例是否处于可连接状态。

  3. 03

    填密码

    按客户端提示填写实例对应的 VNC 密码。不要用控制台登录密码代替,也不要将凭据保存到公用电脑。

    首次进入桌面后,检查键盘布局与系统时间,再核对 Xcode 和命令行工具版本。发现凭据异常时,通过工单处理。

设置 Linux

先登记公钥,再打开会话

SSH 用于执行命令,VNC 客户端用于图形操作。两种方式可以按任务切换,但各自的认证信息要分别核对。

保管密钥

在自己的 Linux 电脑生成 SSH 密钥。私钥只留在本地,公钥才用于配置远端用户的授权文件;不要上传私钥来完成登录配置。

ssh-keygen -t ed25519 -f ~/.ssh/xcodehost
chmod 600 ~/.ssh/xcodehost

通过已授权的会话或桌面完成公钥登记后,再测试密钥登录。验证成功前,不要关闭仍可用的接入方式。

核对主机

首次 SSH 接入会提示主机指纹。应通过可信渠道核对指纹后接受;如果原有记录发生变化,先确认实例是否重装,不要直接忽略警告。

ssh -i ~/.ssh/xcodehost \
  -p "$SSH_PORT" \
  "$MAC_USER@$MAC_HOST"

命令中的三个环境变量需先设为控制台提供的 SSH 端口、系统用户名与连接地址。VNC 客户端则填写独立的 VNC 字段。

执行构建

从登录记录走到导出产物

下面是命令与预期输出节选,不是在线执行结果。示例假定项目已生成 Archive,签名配置正确,并已准备好 fastlane 所需的上传授权。

SSH / Archive / .ipa
$ ssh -i ~/.ssh/xcodehost -p "$SSH_PORT" "$MAC_USER@$MAC_HOST"
Last login: ...

$ xcodebuild -version
Xcode ...

$ xcodebuild -exportArchive \
  -archivePath build/App.xcarchive \
  -exportPath build/export \
  -exportOptionsPlist ExportOptions.plist
** EXPORT SUCCEEDED **

$ fastlane pilot upload --ipa build/export/App.ipa
Successfully uploaded package to App Store Connect
工程目录、Archive 名称与导出配置文件需按项目修改;输出用于识别成功阶段,不代表任何实例已经完成构建或上传。

先验环境

用 xcodebuild -version 核对当前工具链。Flutter 项目先运行 flutter doctor;React Native 项目核对依赖后执行 pod install;Unity 项目先传入导出的 Xcode 工程。

再验产物

Archive 成功不等于 .ipa 已导出,导出成功也不等于上传完成。分别保留三个阶段的日志,并下载构建产物;上传验证报错时,从报错阶段排查,不必重新配置远程桌面。

选择接入点

按操作地点核对往返区间

五个节点都可以用于桌面、构建和文件传输。参考区间对应表中的辐射区,不是从任意城市连接的保证值,也不是当前实时测量结果。

节点延迟参考:按辐射区阅读,按自己的接入网络验证。
节点 辐射区 参考往返区间 适合的工作方式
新加坡 东南亚 20~50ms 区内桌面操作;SSH 构建;工程传输
东京 东亚 30~60ms 区内桌面调试;SSH 构建;产物下载
首尔 东北亚 30~50ms 区内远程桌面;命令行构建;文件交接
香港 华南与东南亚 20~40ms 区内桌面操作;SSH 构建;工程上传
美国西部 北美西岸 25~35ms 区内桌面检查;自动构建;产物传输

区间参考,实际以接入网络为准。往返延迟不等于文件吞吐速度,不能据此推算上传耗时或编译耗时。

经常操作 Xcode 界面时,优先考虑操作者所在区域;主要跑无人值守构建时,还要考虑源码与产物的传输路径。实际可用状态以控制台实时返回为准。

排查卡顿

先减少画面,再判断链路

桌面拖动不顺、SSH 无法连接、文件传输缓慢是不同问题。一次只调整一项,并记录调整前后的现象。

  1. 01

    降画质

    先降低远端分辨率和客户端画面质量,关闭不必要的桌面动画。用输入文字、打开菜单等短操作确认变化,不用整段视频播放判断开发桌面的体验。

  2. 02

    换命令

    桌面只是辅助检查时,把编译转到 SSH。保留日志并分阶段执行依赖安装、Archive 与导出;若 SSH 正常而 VNC 卡顿,优先排查画面传输,而不是修改工程。

  3. 03

    选近点

    对照参考表选择接近操作者的节点,同时检查本地无线网络、代理与带宽占用。节点选择发生在下单配置时,不要把更换节点理解为现有工程会自动迁移。

拿自己的工程试连

先验证桌面、SSH 和文件传输,再开始正式出包。退租前下载工程与产物,清理证书和密钥;到期不续即停。