连接 · 配置 · 排查

先定位问题,再继续构建

这里是云端 Mac 的操作说明。首次连接从下方四张卡开始;已有实例遇到异常,搜索症状或直接跳到故障自查。

首次交付后

先把连接和访问权限确认好

MacFTP 提供独享 Apple Silicon 物理机,macOS 原生运行,非虚拟机。以下步骤使用控制台实例详情中的实际 IP、用户名和连接信息;不要用订单编号代替登录用户名。

SSH 登录

打开本地终端,将连接命令中的用户名、IP 和端口替换为实例详情里的值。首次连接先核对主机指纹,再确认信任。

ssh -p PORT USER@NODE_IP

看错误类型:超时先查网络;Connection refused 先核对端口和实例状态;Permission denied 先核对用户与认证方式,不要连续猜密码。

VNC / 屏幕共享

在控制台实例详情查看图形连接方式。使用客户端时按交付信息填写地址、端口与凭据;SSH 密码与图形会话凭据不能想当然地互换。

出现黑屏先断开后重连,并确认没有重复连接到旧会话。若 SSH 正常,先保存构建日志、检查系统是否仍在工作,不急着重启整台机器。

浏览器内的图形连接入口仅在登录后的实例详情中提供。公开帮助页不展示连接凭据。

密码与密钥

首次登录后用 passwd 修改当前用户密码。在本地生成 SSH 密钥,只将公钥加入远端 ~/.ssh/authorized_keys,私钥留在本地。

~/.ssh 目录权限设为 700,authorized_keys 设为 600。保留当前连接,再开一个终端验证密钥登录成功。

验证完成前不要关闭原会话或停用现有认证方式。私钥、密码、恢复信息都不要写入工单。

Xcode 与命令行工具

先执行 xcode-select -p 与 xcodebuild -version,确认当前环境。需要图形操作时通过远程会话检查 Applications 中的 Xcode。

仅使用命令行工具可运行 xcode-select --install;iOS 归档仍需要完整 Xcode。新增 Xcode 后先完成首次启动和所需组件准备,再交给 CI。

多版本并存时按实际目录切换。不要只改应用名称,却让 Runner 继续使用旧开发者目录。

从本地到云端

迁移分三段,每段都有验收点

先跑通同一个提交的单次构建,再接自动任务。下列时间是排期参考,不是交付承诺;仓库体积、网络、依赖下载与签名准备会改变实际耗时。

01 / 数据

同步源码,不搬构建缓存

建议预留 15–45 分钟,大型资源仓库另计。

优先从版本库检出固定提交。需要搬运未提交文件时使用 SFTP 或 rsync;排除 DerivedData、项目 build 目录和本地日志,避免把旧路径与失效缓存带到新机器。

先用 dry-run 检查文件清单,再执行实际同步。示例中的 USER 与 NODE_IP 使用实例交付值;自定义 SSH 端口需额外配置。

rsync -av --dry-run \
  --exclude='DerivedData/' \
  --exclude='build/' \
  ./ USER@NODE_IP:~/project/
git rev-parse HEAD
git status --short

通过条件:两端提交一致,资源文件齐全,敏感配置未进入代码仓库。

02 / 工具链

重建依赖与签名环境

建议预留 30–90 分钟,首次下载可能更久。

记录本地 Xcode、SDK、Homebrew 与脚本依赖版本。先用 brew --version 检查是否已安装 Homebrew;项目有 Brewfile 时再按文件恢复依赖。

签名所需的 p12 与描述文件通过加密连接传输。将证书导入专用钥匙串,描述文件放入构建用户的目录;不要把密码写进仓库或构建日志。

brew --version
xcodebuild -version
xcodebuild -showsdks
security find-identity -v -p codesigning

通过条件:SDK 满足项目要求,签名身份有效,手动 archive 能完整结束。

03 / CI 接入

注册 Runner,再打开自动触发

建议预留 20–60 分钟,不含项目测试耗时。

按代码平台生成的注册指令安装 GitHub Actions 自托管 Runner 或 GitLab Runner。注册令牌只在配置时使用,工作流中不要保存机器密码。

核对 self-hosted、macOS 与 ARM64 标签。先用固定提交手动触发一次,检查工作目录、产物路径和签名权限,再开放分支自动构建。

uname -m
sw_vers -productVersion
xcode-select -p
git rev-parse HEAD

通过条件:Runner 在线,目标提交正确,归档产物可取回,日志中没有凭据。

同一台物理节点运行多个任务时,CPU、统一内存与 SSD 仍由这些任务共同使用。先限制并发,再逐步增加,避免把本机任务竞争误判为节点异常。

可以逐段执行

常用命令,先看前提再复制

目录名与文件名是命令示例,执行前替换为机器上实际存在的路径。涉及 sudo 的操作需要管理员权限;不要将包含口令的命令粘贴到公共日志。

选择 Xcode 开发者目录

此例适用于 /Applications/Xcode.app 已存在的情况。多版本环境先确认应用路径,切换后检查版本与 SDK;仅当前任务使用其他版本时,可在任务内设置 DEVELOPER_DIR。

切换与验证
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
xcode-select -p
xcodebuild -version
xcodebuild -showsdks

把 p12 导入构建钥匙串

先准备名为 build.keychain-db 的专用钥匙串,并在执行任务的用户会话中解锁。导入时按系统提示输入 p12 密码;证书可见不代表私钥访问权限已经满足 CI 要求。

导入与身份检查
security import ./signing.p12 \
  -k "$HOME/Library/Keychains/build.keychain-db" \
  -T /usr/bin/codesign
security find-identity -v -p codesigning \
  "$HOME/Library/Keychains/build.keychain-db"

用 launchd 管理 Runner

下面适用于已完成注册、并包含 svc.sh 的 GitHub Actions Runner 目录。服务脚本负责安装与启动,底层由 launchd 管理;GitLab Runner 应使用其自身服务命令,不混用此脚本。

在 Runner 目录执行
./svc.sh install
./svc.sh start
./svc.sh status
launchctl list | grep -i runner

launchd 中能查到任务,只说明服务已经注册。仍需回到代码平台确认 Runner 在线,并实际触发一次构建;需要 GUI 或钥匙串交互的任务还要验证用户会话状态。

订单与租期

把到期时间和付款状态分开核对

服务按天、周、月、季预付,按所选租期一次结算。账户状态、付款状态与实例状态是不同信息;处理问题时请同时记录订单编号和实例编号。

如何续租,怎样确认数据继续保留?

登录控制台,在订阅或实例对应的订单中查看到期时间与续租入口。对原订阅完成续租后,核对租期是否已延长;不要把新建另一笔实例订单当作原节点续租。若付款后时间未更新,保留交易凭证并提交工单。重要数据仍应由你独立备份。

会收到到期提醒吗,应该以哪个时间为准?

以控制台显示的订单到期时间为准,并核对界面标注的时区。保持账户邮箱可用,检查通知与垃圾邮件;不要将是否收到邮件作为判断租期的唯一依据。建议在团队日历设置自己的提醒,在到期前完成续租或将代码、证书与构建产物迁出。

付款方式、币种和交易核对怎么处理?

仅支持 USDT-TRC20 与 Visa / Mastercard / Amex(经 Stripe),全部以美元(USD)结算,实际可用网关以后端接口返回为准。链上付款先核对网络、金额与支付页信息;银行卡付款以订单内返回的结果为准。查询异常时提供订单编号或交易哈希,不提交完整卡号、验证码或钱包私钥。

付款异常、退款和收据应当到哪里处理?

先在控制台核对账单、付款记录及可提供的收据。退款条件、处理范围与相关规则见服务条款,不要以删除本地连接配置或停止使用机器代替退款申请。有重复扣款疑问时附上相关订单与交易引用,通过控制台工单核对。

先保存现场

故障自查,按影响范围从小到大

先判断是单个客户端、单个会话,还是整台节点异常。记录原始错误与发生时间,完成一项再进行下一项;不要连续改网络、重置密码和重启,让问题失去可追踪性。

网络与连接目标

重新从实例详情核对 IP、端口与用户名。尝试另一条本地网络,检查本地代理、防火墙和公司出口策略。ICMP 不通不能单独证明 SSH 不可用,需结合实际端口连接结果。

ssh -vv -o ConnectTimeout=10 -p PORT USER@NODE_IP

记录:超时、拒绝连接或认证失败。分享调试日志前,删去本地用户名、敏感路径与认证信息。

磁盘与构建缓存

先用 df -h / 看可用空间,再用 du -sh ~/Library/Developer/Xcode/DerivedData 确认缓存占用。停止相关构建后再按项目清理,避免删除正在写入的归档。

保留:待交付产物、签名文件和必要日志。清理后用同一提交重试,确认不是依赖损坏或路径错误。

系统与工具链提示

通过图形会话检查是否有未处理的系统对话框或 Xcode 首次启动提示。执行 sw_vers、xcodebuild -version 和 xcodebuild -showsdks,确认 CI 使用的环境与预期一致。

先暂停任务并备份,再由你决定是否更新系统或工具链。不要在 archive 运行中切换 Xcode 路径。

会话恢复与重启

先退出远程客户端再重连;SSH 仍可用时,检查 uptime 与正在运行的任务。只有确认需要整机恢复后,才登录控制台进入实例详情,使用其中提供的重启操作。

重启会中断构建与远程连接。先保存可取回的日志和产物;无法访问或没有可用操作时提交工单,不要反复发送重启请求。

仍未解决

让工单从有效信息开始

登录控制台提交技术工单,便于关联订单与实例。无法登录或需要售前沟通时,使用 support@macftp.com;其他联系说明见联系页面。

  • 定位实例:订单编号、实例编号、节点和机型。节点为新加坡、东京、首尔、香港之一,机型请填写实例详情中的完整名称。
  • 还原现场:发生时间与时区、完整错误提示、复现步骤,以及 SSH 与图形连接是否分别可用。
  • 减少往返:已经完成的自查、最近改动、脱敏后的日志片段。不要发送密码、私钥、p12 口令或完整支付凭据。