从首次登录到构建归档

连上。迁移。开打。

这份指南覆盖首次连接、环境迁移、CI 接入与归还。先用一条 SSH 命令确认节点可达,再把代码、签名与工具链搬过去。整台独享物理机,非虚拟机,macOS 图形界面与命令行完整可用。

已经下单?先在控制台确认实例状态与连接凭据。不要把密码、私钥或签名证书贴进公开日志。

第一步 · 验证连接

先连通,再搬环境。

打开控制台里的实例详情,核对节点地址、用户名、端口与初始密码。以下命令中的地址需要替换为实际值;端口不同则按实例详情填写。

SSH

命令行:先跑一次交互登录

首次连接时核对主机指纹,确认与可信的实例信息一致后再接受。不要为了跳过提示而关闭主机密钥检查。

ssh admin@<节点地址>

如果实例使用非默认 SSH 端口,在命令中加上 -p <端口>。登录后先执行以下检查,确认当前用户、系统版本与剩余磁盘空间。

whoami
sw_vers
df -h
passwd

passwd 会交互式修改当前用户密码。随后在本地生成独立的 ed25519 密钥,将公钥追加到节点的 ~/.ssh/authorized_keys;私钥只留在自己的设备或受控密钥库。

ssh-keygen -t ed25519
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

权限命令在节点上执行。先用第二个终端验证密钥登录成功,再按团队安全策略调整密码登录方式,避免把自己锁在机器外。

验收:新终端可用密钥登录
VNC

图形界面:完成交互式设置

需要操作钥匙串、检查 Xcode 设置或查看模拟器时,使用实例详情提供的屏幕共享连接信息。连接地址与 SSH 地址不一定使用同一端口,不要凭经验填入。

  1. 确认实例已就绪,读取控制台里的屏幕共享地址、端口与用户信息。
  2. 在本地 Mac 的屏幕共享应用中连接,使用交付的账户凭据登录。
  3. 首次进入桌面后修改初始密码,并检查登录钥匙串是否能正常解锁。
  4. 打开需要使用的 Xcode 版本,完成许可确认与必要组件安装,再回到命令行验证。
xcode-select -p
xcodebuild -version

若通过 SSH 隧道连接屏幕共享,本地转发端口与目标端口应以实例实际配置为准。只向必要的来源开放访问,不要把图形连接端口直接暴露给所有来源。

黑屏不一定代表节点离线。先用 SSH 检查机器是否可达,再检查图形会话、账户权限与连接端口;不要连续重置系统来试错。

验收:桌面可见,Xcode 版本正确
第二步 · 按依赖顺序迁移

本地 Mac → 云端 Mac。

顺序是数据、工具链、CI。先迁移一个能独立验证的工程,不要一开始就复制整块用户目录。下面的耗时是操作预算,仓库大小、网络与依赖下载会影响实际进度。

01 / 数据

代码与签名先到位

从 Git 克隆仓库,切到与本地一致的提交。私有仓库使用权限受限的部署密钥或短期令牌,不把长期凭据写进仓库地址。

git clone <仓库地址>
git rev-parse HEAD
rsync -av --progress ./Assets/ \
  admin@<节点地址>:~/work/Assets/

需要签名时,从本地钥匙串导出包含私钥的 .p12 文件,使用独立密码加密传输,再导入节点钥匙串。描述文件单独迁移,并核对证书有效期、团队与目标配置。

大型资源用 rsync 增量同步。首次不要加删除参数;先检查目标目录,避免误删节点上新生成的产物。

预计 3–10 分钟 · 不含大文件传输
02 / 工具链

还原版本,不照搬缓存

在本地导出 Brewfile,传到节点后执行还原。先阅读清单,移除不需要的桌面应用与过期依赖,减少首次下载量。

brew bundle dump --file=Brewfile
brew bundle --file=Brewfile
xcodes list
xcodes install <所需版本>

核对项目要求的 Xcode、Ruby 与 CocoaPods 版本。使用 xcodes 安装版本时,遵循软件授权与下载权限要求;安装完成后用 xcodebuild -version 验证实际选择。

有 Gemfile 的工程优先执行 bundle exec pod install。SPM 使用工程自带的锁定文件解析依赖;第一次构建作为缓存预热,不拿它代表后续构建速度。

预计 5–15 分钟 · 下载另计
03 / CI 接入

先手动成功,再注册执行器

先在交互式会话里完成一次构建与签名。命令行能归档后,再注册 GitHub Actions self-hosted runner 或 GitLab Runner,避免同时排查工具链和调度配置。

bundle exec fastlane match development --readonly
bundle exec fastlane gym

match 的签名类型与具体 lane 以项目配置为准。CI 使用受限凭据,密钥放在受保护的变量或密钥库,不把密码写入脚本。

给临时执行器设置独立标签,先只允许可信分支运行。确认执行账户能访问签名钥匙串与工作目录,并验证非交互构建不会等待弹窗。

预计 3–8 分钟 · 以已有流水线为前提

迁移完成的标准:同一提交、同一 Xcode 版本、相同依赖锁定文件,能在节点上生成一份可取回的归档产物。不要只以“依赖安装成功”作为环境迁移完成的判断。

交付过程 · 约 4 分钟

卡住时,看对应的那一步。

从下单到节点可用通常约 4 分钟,不包括你自己的代码传输、工具下载与首次编译。付款、分配和交付进度以控制台实际返回为准。

  1. 01

    确认下单配置

    约 40 秒

    选择机型、租期与节点,核对附加项和总金额。卡住时检查必选项与页面内错误提示,不要重复建立相同订单。

  2. 02

    完成美元付款

    约 60 秒

    仅支持 USDT-TRC20 与 Visa / Mastercard / Amex(经 Stripe),USD 结算。卡住时核对账单状态;链上确认与发卡行验证可能增加等待时间。

  3. 03

    等待节点初始化

    约 2 分钟

    付款确认后开始分配独享物理节点。卡住时查看实例状态与系统提示;账单已付但长期没有状态变化,保留订单号后提交工单。

  4. 04

    读取交付通知

    凭据邮件 / 控制台

    检查收件箱与垃圾邮件目录,并对照控制台中的连接信息。不要向陌生邮件回复密码;收不到通知时先检查实例是否已经就绪。

  5. 05

    首次登录验证

    约 20 秒

    先连接 SSH,再验证图形界面。卡住时记录完整错误信息、发生时间与时区,按下方排障清单区分网络、认证与会话问题。

归还前 · 数据先落地

机器会归还。
产物要带走。

到期不自动续费。需要继续使用时,在到期前进入控制台手动续租,并确认处理结果;不要假设仍在运行的构建任务会延长租期。

归还后整盘安全擦除,节点不是长期备份空间。把最后一次归档、调试符号与必要日志复制到自己的受控存储,再验证文件可读取。删除本地文件不能代替撤销远程访问授权。

按这 4 项完成交接

  1. 导出构建产物。取回 .xcarchive、.ipa、dSYM 和必要构建日志,确认上传或下载已完成。
  2. 注销临时执行器。在 CI 平台移除 runner 注册,停止本地执行器进程,撤销部署密钥与临时访问令牌。
  3. 清理签名材料。移除导入的证书私钥、描述文件与临时配置,检查流水线日志没有泄露密钥或口令。
  4. 确认到期与备份。核对控制台显示的到期时间及时区,给最后一次构建和产物传输留出余量。

团队协作时,指定一个人负责最终归还检查。不要让“以为另一位同事已经下载”成为唯一备份策略。

常用场景 · 最小可运行配方

先跑通一条,再扩成流水线。

两档机型均为 M4 独享物理机:SDK Pack 16 配备 16GB / 256GB,SDK Pack 24 配备 24GB / 512GB。内存与空间按实际工程预算选择,不把并发任务全部塞进第一次验证。

App 自动化打包

先检查 scheme 可共享、签名配置正确、钥匙串可访问。项目有 Gemfile 时,用 Bundler 固定 Fastlane 版本,再执行归档。

bundle install
bundle exec fastlane gym
bundle exec fastlane pilot upload \
  --ipa ./build/App.ipa

将示例路径替换为实际产物路径。pilot 上传前配置项目使用的发布 API 密钥,放入受保护的 CI 变量;上传权限与构建成功是两个独立检查项。

验收:归档可取回,上传有结果

远程 Mac 开发

先验证普通 SSH,再让 VS Code Remote-SSH 复用同一份连接配置。编辑器连接失败时,先检查其远程扩展日志,不要直接改动系统权限。

Host sdk-build
  HostName <节点地址>
  User admin
  IdentityFile ~/.ssh/id_ed25519
  ServerAliveInterval 30

配置放在本地 ~/.ssh/config。连接后核对终端所在机器与工作目录;模拟器和图形调试通过屏幕共享完成,代码编辑与 Git 操作用 SSH 即可。

验收:编辑与构建使用同一工作区

GPU 渲染与 MLX 推理

先确认任务支持 Apple Silicon 与所需图形后端,再准备隔离的 Python 环境。模型权重、应用内存与中间结果都需要预留空间。

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install mlx
python -c "import mlx.core as mx; print(mx.default_device())"

先用小输入验证依赖与设备选择,再逐步增加分辨率、批次或上下文长度。记录应用版本和参数;具体模型能否运行取决于权重大小与实际内存占用。

验收:小任务完成,资源占用可控
排障 · 一次只改一个变量

把错误分到正确的一类。

先保存原始错误,再做修改。下面四类问题分别对应网络、图形会话、签名权限与存储,重装环境通常不是第一步。

SSH 超时或认证失败

超时:核对地址、端口、实例状态与本地网络限制。用 ssh -v 判断停在连接阶段还是认证阶段。

认证失败:核对用户名、密钥路径与 authorized_keys 权限。指纹变化时先确认是否重新交付了节点,不要直接删除可信主机记录。

工单附:错误原文、端口、发生时间

屏幕共享黑屏

先用 SSH 确认节点可达,再核对屏幕共享端口与登录账户。检查是否仍有初始化任务,以及是否只是本地客户端保存了旧连接。

退出客户端后重新连接。若使用隧道,确认转发进程仍在运行。不要在未导出产物时反复重启机器。

工单附:客户端版本与脱敏截图

钥匙串弹窗阻塞 CI

用图形会话确认签名私钥已经导入,证书在有效期内。检查 runner 的执行账户是否就是配置签名环境的账户。

对 CI 使用独立签名钥匙串,按团队策略配置解锁与访问权限。先跑一次非交互构建验证,不要把钥匙串密码打印进日志。

工单附:失败阶段与签名错误码

磁盘空间不足

先运行 df -h,再检查 DerivedData、归档、模拟器数据与容器镜像。只清理已确认可重建的缓存,保留尚未导出的归档与调试符号。

工程与资源长期超出空间预算时,可在下单配置中选择 +1TB SSD 或 +2TB SSD 附加存储。已有实例的调整方式先通过工单确认,不假设加购后立即扩容。

工单附:剩余空间与大目录统计
继续阅读 · 从问题进入

需要展开看,再去技术文章。

本页保留从连接到归还的完整操作顺序。容器工具、依赖迁移、安全连接与租用选型的长篇说明,统一从技术文章目录进入,以目录中的实际发布内容为准。

先确定你要解决哪一层问题

工具链:安装不等于可构建。记录 Xcode、依赖管理器与锁定文件,优先比较本地和节点之间的版本差异。

安全:连接不等于授权正确。为临时节点使用独立密钥与受限令牌,归还时撤销注册,不复用个人长期凭据。

选型:一次成功不等于长期适配。观察实际内存峰值、磁盘增量和并发任务,再决定机型与租期。

需要工程师一起看

把现场留下,
我们从错误开始查。

已租实例的问题,登录控制台提交工单,附订单号、节点、发生时间与时区、复现步骤及脱敏日志。售前与无法登录的问题,也可发送邮件至 support@macsdk.com。

响应时间以工单中显示的受理与回复进度为准,不把自动回执当作人工回复。问题影响正在进行的构建时,请在标题说明影响范围,并保留失败现场;不要提交私钥、密码或完整签名文件。