首次连接
检查密钥权限、主机指纹、用户名、端口与本地网络,确认连接失败发生在认证前还是认证后。
开始排查连接这里不从模糊的“重试一次”开始。先确认连接入口,再核对工具链、依赖、签名资料、磁盘与日志。每一步都给出要观察的返回信息,适用于 OakVPS 独享物理机上的 iOS 构建、macOS 自动化与 MLX 实验。
已有订单的问题请登录控制台提交工单;不要在公开页面发送私钥、签名证书密码或完整付款资料。
六类入口同时铺开。若问题跨越多个阶段,从最早出现异常的环节开始,不要先清空整个环境。
检查密钥权限、主机指纹、用户名、端口与本地网络,确认连接失败发生在认证前还是认证后。
开始排查连接核对当前工具链、项目 scheme、依赖状态、签名文件、磁盘余量与可导出的结果包。
查看构建命令区分 Ruby 环境、插件、lane 参数与 Xcode 返回错误,保留完整日志而不是只截取最后一行。
检查自动化输出先打包产物并生成校验值,再传输归档;避免直接搬运正在写入的构建目录或依赖缓存。
查看交接顺序确认本地网络稳定、任务能在断开会话后继续,并在离开设备前结束交互会话和清理临时资料。
核对会话边界按统一内存、模型文件、隔离环境与实验记录检查,不用无法复核的速度数字判断环境是否正常。
检查实验环境先保存原始错误,再逐项改变一个变量。连续修改用户名、端口和密钥会让错误原因失去定位价值。
在本地执行 chmod 600 ~/.ssh/oakvps_key。若私钥对其他用户可读,SSH 客户端会在发起认证前拒绝使用它。
首次连接时,将终端显示的指纹与控制台连接信息核对后再确认。主机信息变化时不要直接删除旧记录并跳过核验。
使用订单连接信息中给出的系统用户名,不要把邮箱地址或本地电脑用户名代入远程命令。
显式传入连接信息中的端口,例如 ssh -p 22 user@host。超时通常发生在认证前,权限拒绝通常发生在认证阶段。
确认公司网络、VPN、本地防火墙和出口策略允许目标端口。可换到可信网络复测,但不要在不可信网络传输项目凭据。
成功进入后先执行 whoami、sw_vers 与 df -h,记录用户、系统版本和磁盘余量,再导入项目资料。
终端里最后一行通常只是结果,不一定是原因。下面三段命令分别确认连接身份、Xcode 构建入口和 fastlane lane 状态。执行前将示例参数替换为自己的连接信息、工作区和 scheme。
$ ssh -i ~/.ssh/oakvps_key -p 22 oak@203.0.113.10
$ whoami
oak
$ sw_vers -productVersion
15.x
$ df -h /
观察点:若命令已返回远程用户名,说明网络与认证阶段已经通过;后续问题应转向系统权限或项目环境。
$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
$ xcodebuild -version
Xcode 16.x
$ xcodebuild -workspace App.xcworkspace \
-scheme App \
-destination 'generic/platform=iOS' \
build | tee build.log
观察点:先确认开发者目录,再检查工作区和 scheme。保留 build.log,不要只复制结尾的失败摘要。
$ bundle exec fastlane lanes
$ bundle exec fastlane ios build \
--verbose 2>&1 | tee fastlane.log
[09:24:18]: Driving the lane 'ios build'
[09:24:19]: Resolving package dependencies
观察点:能列出 lane 说明 Ruby 依赖入口可用。若后续失败,应继续查找日志中最早出现的错误,而不是只看退出码。
版本、缓存、签名、磁盘和日志互相影响。下面的顺序能减少无关改动,并让下一位接手者复现同一故障。
| 顺序 | 检查对象 | 执行或记录 | 判断依据 |
|---|---|---|---|
| 01 | Xcode 版本 | xcodebuild -version 与 xcode-select -p |
项目要求的工具链与当前活动目录一致,命令行和图形界面没有指向不同版本。 |
| 02 | 依赖缓存 | 先记录锁文件,再查看 Swift Package、CocoaPods 或项目自有缓存状态。 | 锁文件未被无意改写;只清理与当前错误相关的缓存,不删除仍可复用的全部依赖。 |
| 03 | 签名资料 | 核对目标、bundle 标识、证书有效性和 provisioning profile 对应关系。 | 资料与当前构建目标匹配,密码和私密内容不进入日志、仓库或工单附件。 |
| 04 | 磁盘空间 | df -h、项目目录体积和 DerivedData 体积。 |
构建目录、依赖、归档和临时文件有足够空间;异常增长的目录被单独识别。 |
| 05 | 完整日志 | 使用 tee 同时显示并保存输出,记录命令、时间与退出码。 |
日志包含最早错误、上下文和最终退出状态,可以由另一位工程师按同一命令复现。 |
如果依赖解析突然变化,先检查提交前后的锁文件差异、包源配置和网络结果。只有确认缓存本身损坏时,才删除对应范围,避免把可复现问题变成一次性状态。
错误可能来自证书不可用、描述文件与 bundle 标识不一致,或构建目标选错。记录错误代码与目标名称,但不要把证书密码、私钥或完整签名资料写入工单。
重复执行可能改变缓存和临时文件。首次失败后先保存日志、命令、工作区状态和磁盘信息,再进行单变量复测,便于判断修改是否真正解决问题。
远程窗口只是操作入口,不应成为任务状态的唯一保存位置。命令、日志、产物与校验值都应落到明确目录。
确认本地网络、主机指纹、目标用户名和项目资料来源。敏感文件只在任务需要时导入。
让构建或实验运行在可恢复的会话管理方式中,并把标准输出同时写入日志文件。
确认文件已经保存、任务状态已记录,再结束图形界面或 SSH 会话,不把未保存编辑留在窗口中。
团队成员离组或任务结束后,撤销不再需要的密钥与访问权限,并核对共享目录。
确认构建已结束,再归档产物。不要传输仍在生成的目录或数据库文件。
记录文件名、构建版本、环境版本、生成命令和校验值,让接收方能核对完整性。
在本地解包并检查关键文件,确认归档不是空目录,也没有遗漏必要日志。
按团队策略删除临时密钥、令牌、签名资料和不再需要的模型副本,同时保留可公开的构建记录。
MLX 使用 Apple Silicon 的统一内存。模型文件、运行时占用、上下文长度和中间结果都会共同影响可用空间,因此不能只看模型文件本身的体积,也不应以单次运行时间推断环境性能。
三档均为独享物理机:基础档采用 M4、16GB 内存与 256GB 存储;进阶档采用 M4、24GB 内存与 512GB 存储;高内存档采用 M4 Pro、64GB 内存与 2TB 存储。具体选择应以模型、数据集与并发任务的实测占用为依据。
为每个项目固定 Python 环境与依赖版本,保存可复现的依赖清单,不在系统环境中混装多个实验版本。
分别记录下载包、解压后文件、缓存与输出目录体积,并给临时文件留出空间,避免实验中途因磁盘不足中断。
使用活动监视信息或命令行记录峰值占用。若系统持续出现明显内存压力,应减少并发、缩小任务或调整配置,而不是只重复运行。
写下代码版本、依赖版本、模型标识、参数、输入摘要、输出位置和异常信息,使下一次运行能够按同一条件复现。
支持人员需要知道问题发生在哪个订单、哪个节点、哪一步和哪个时间段。信息越具体,越容易直接进入诊断。
提供控制台中可见的订单标识,不发送付款凭据或完整支付资料。
必填写明订单所用节点以及当前连接入口,便于区分网络路径和环境范围。
必填使用带时区的时间,并说明问题是持续发生、间歇发生,还是仅在一次任务中出现。
必填从正常状态开始,按顺序列出命令、参数、预期结果和实际结果,不省略中间操作。
必填附上完整错误上下文与退出码,移除私钥、令牌、证书密码、仓库凭据和项目敏感内容。
建议附上选择 Oak M4、Oak M4 Plus 或 Oak M4 Pro,按任务周期租用独享物理机。下单后在控制台查看订单、连接信息与支持工单。