可执行的工程支持

从连接云端 Mac 到交付构建产物,逐步解决问题

这里不是概念文档。每份指南都给出准备项、执行步骤、验证结果与失败时应保留的日志。适用于 SSH、VNC 远程桌面、Xcode、fastlane、自托管 Runner 和账单管理。

4 类指南入口 5 个服务节点 365 天正常运行
build-diagnostics 检查通过
连接方式 SSH / VNC
构建工具 Xcode / fastlane
执行架构 Apple Silicon
$ xcodebuild -version Xcode 16.x $ uname -m arm64 $ df -h / volume check: ready
先验证环境,再运行完整流水线 把失败范围缩小到连接、依赖、签名或并发中的一项。
支持中心检索

按任务筛选,不必从头阅读

选择当前正在处理的任务,或输入 SSH、归档、签名、Runner、节点、账单等关键词。筛选只改变索引卡片,完整操作步骤仍保留在本页下方。

连接指南

先建立可信连接,再开始配置环境

连接信息以控制台显示为准。不要把私钥、一次性凭据或完整连接命令粘贴到公开仓库、构建日志或团队群组。

SSH 命令行连接

  1. 1
    准备本机公钥

    优先使用带口令保护的独立密钥。只上传公钥,不通过工单或邮件发送私钥内容。

  2. 2
    读取连接信息

    在控制台核对设备标识、节点、主机地址、端口与用户名,避免复用旧租用记录。

  3. 3
    核验主机指纹

    首次连接前比较控制台提供的指纹。指纹不一致时停止连接并提交工单,不要直接覆盖本地记录。

  4. 4
    执行基础检查

    运行 uname -mxcodebuild -versiondf -h /,记录架构、工具链和磁盘余量。

VNC 远程桌面连接

  1. 1
    先确认 SSH 可用

    图形连接失败时,SSH 是检查进程、磁盘和网络状态的主要路径。先完成主机指纹核验。

  2. 2
    从控制台获取会话信息

    使用当前设备对应的 VNC 入口与临时凭据,不保存到浏览器同步、共享文档或流水线变量中。

  3. 3
    检查图形环境

    登录后确认分辨率、键盘布局、Xcode 启动状态和可用存储空间,再开始签名或归档操作。

  4. 4
    结束并清理会话

    退出正在运行的开发工具,移除临时下载和明文凭据,再关闭远程桌面会话。

凭据保管边界:团队成员应使用各自受控的访问方式。成员离开项目时,撤销对应公钥和流水线令牌,不要只修改本地 SSH 配置。
Xcode 构建指南

把版本、依赖与导出参数写明,构建才可复现

不要依赖图形界面里上一次选择的 scheme。自动化任务应显式指定 Xcode 路径、workspace、scheme、configuration、destination 与导出配置。

01

选择并验证 Xcode 版本

先读取项目要求,再用 xcode-select 指向目标版本。随后分别运行 xcodebuild -versionxcrun swift --version,把输出写入构建日志开头。

02

按锁文件安装依赖

Ruby 项目优先执行 bundle install,Pods 项目按锁文件恢复,Swift Package 先解析依赖。缓存只能加速,不应替代锁文件提供的版本约束。

03

运行归档任务

把 DerivedData 和 archivePath 指向当前任务的独立目录。并发任务不要共享同一个输出路径,以免索引、缓存或归档文件互相覆盖。

04

导出并验证产物

使用受版本控制的导出配置执行导出。验证命令退出码、产物文件、签名结果和 dSYM,再将产物复制到受控交付目录。

05

保存可定位的日志

至少保存纯文本构建输出、导出日志与 xcresult。文件名应包含流水线任务标识,不要包含访问令牌、私钥内容或完整签名材料。

archive.sh
xcode-select -p
xcodebuild -version
xcrun swift --version

bundle install
bundle exec pod install

xcodebuild archive \
  -workspace App.xcworkspace \
  -scheme App \
  -configuration Release \
  -destination "generic/platform=iOS" \
  -archivePath output/App.xcarchive \
  -resultBundlePath output/App.xcresult

xcodebuild -exportArchive \
  -archivePath output/App.xcarchive \
  -exportPath output/export \
  -exportOptionsPlist ExportOptions.plist
输入 仓库、锁文件、受控环境变量 运行位置 独享云端 Mac 产出 归档、导出文件、xcresult、脱敏日志
fastlane 自动化指南

敏感变量只在任务期间存在

fastlane 应负责组织构建步骤,而不是长期保存密钥。签名材料、仓库令牌和上传凭据应由受控变量注入,并在任务结束后清理。

INPUT

注入密钥与签名配置

在任务启动时注入最小范围的变量。将临时文件放入任务专属目录,限制文件权限,并避免通过命令回显输出变量值。

  • 变量名可记录,变量值不可进入日志
  • 签名配置与项目分支保持明确映射
  • 临时目录不得被后续任务复用
RUN

执行固定 lane

使用 bundle exec fastlane 固定 Ruby 与 gem 版本。lane 内应明确 scheme、导出方式、输出目录和失败退出条件。

  • 构建前打印工具版本,不打印凭据
  • 失败时保留当前任务日志和 xcresult
  • 重试前先判断是环境问题还是代码问题
CLEAN

保存产物并清理

先把归档、导出文件和日志复制到受控位置,再删除临时签名文件、环境文件、下载缓存和任务工作目录。

  • 校验产物存在且文件大小合理
  • 清除 shell 历史中的敏感命令
  • 确认后台没有遗留构建进程
bundle exec fastlane ios archive 固定依赖版本 独立输出目录 失败返回非零退出码
CI/CD 集成指南

把云端 Mac 作为受控执行节点接入流水线

Runner 应绑定明确的仓库或项目范围。不要让来自不受信任分支的任务自动获得生产签名材料,也不要让不同安全级别的任务共享同一工作目录。

GitHub Actions

自托管 Runner 接入流程

  1. 确定作用域

    根据团队权限模型选择仓库级或组织级 Runner,并限制可调用它的项目。

  2. 创建专用系统用户

    Runner 进程不要使用日常管理账号。只授予工作目录和构建工具所需权限。

  3. 设置能力标签

    标签应表达架构、Xcode 主版本与任务类型,让工作流准确选择节点。

  4. 配置串行或并行策略

    一个工作目录同一时间只处理一个任务。需要并发时使用独立目录或独立设备。

  5. 加入任务后清理

    删除临时变量文件、签名材料和未上传产物,检查残留进程后再接收下一项任务。

常见流水线系统

通过 Agent 或 SSH 执行器接入

  1. 建立单向任务入口

    由流水线调度任务到云端 Mac,避免把设备管理凭据写入仓库配置。

  2. 限制命令与目录

    构建用户只访问指定仓库、缓存和输出路径,管理操作使用独立权限路径。

  3. 预检工具链

    正式构建前验证架构、Xcode、Ruby、依赖管理器和磁盘余量,预检失败就停止任务。

  4. 统一退出码

    依赖安装、测试、归档与导出任一步骤失败都应返回非零状态,避免流水线误判成功。

  5. 上传后再清理

    确认产物和日志已上传,再清理任务目录。保留任务标识以便关联工单。

并发建议:基础档配置为 M4、16GB、256GB,适合轻量构建与单项目签名;Pro 档配置为 M4 Pro、64GB、2TB,更适合高并发构建与较大的依赖缓存。最终选择应以单次构建峰值内存、并行任务数和缓存体积为依据。
故障定位清单

一次只排除一个变量

先记录失败任务标识和时间范围,再按网络、磁盘、签名、缓存、并发的顺序检查。每一步都保留验证结果,避免反复重装环境。

网络与连接超时怎么排查

先确认本地网络能到达设备端口,再检查 DNS、代理、SSH 主机指纹与系统时间。分别记录连接建立时间、断开时间和错误原文。若 SSH 可用而 VNC 不可用,应检查图形会话进程,不要先重置整个开发环境。

ssh -v user@host
磁盘空间不足或归档写入失败

使用 df -h / 查看卷余量,再检查 DerivedData、依赖缓存、旧 archive 和模拟器数据。先识别大目录,再删除明确可重建的缓存。不要在构建运行期间清理它正在使用的目录。

du -sh ~/Library/Developer/*
签名证书或配置不匹配

核对项目标识、构建配置、导出方式、证书有效性与描述文件映射。确认流水线注入的是当前任务所需材料,并检查系统时间。提交日志时保留错误类型和匹配过程,隐藏证书内容、私钥和令牌。

security find-identity -v -p codesigning
依赖缓存导致版本漂移或编译异常

先比较锁文件与日志中的实际版本。使用新的任务目录执行一次无共享缓存构建;若问题消失,再逐层恢复 Swift Package、Pods、Ruby 和 DerivedData 缓存,以定位污染来源。

swift package resolve
构建并发造成资源争用

检查同时运行的 xcodebuild、测试和依赖进程,以及每个任务的输出目录。降低并发后复测,观察峰值内存、磁盘写入和任务耗时。多个任务不得共享 archivePath、resultBundlePath 或临时签名目录。

ps -axo pid,%cpu,%mem,command
节点与可用性

五个节点都支持两档独享物理机

新加坡、日本(东京)、韩国(首尔)、香港、美国东部全年 365 天正常运行。目录内组合常态可订,实际可用性以控制台实时返回为准。

MiniRents 两档机型在五个节点的目录与选择建议
节点 适合优先考虑的团队位置 MiniRents M4 MiniRents M4 Pro 选择建议
新加坡SG 东南亚团队与邻近代码仓库 充足 充足 优先比较开发者到节点及仓库到节点的连接稳定性。
日本(东京)JP 日本与东亚团队 充足 充足 适合代码仓库和协作成员主要位于东亚的工作流。
韩国(首尔)KR 韩国与邻近东亚团队 充足 充足 选择前可从实际办公网络测试 SSH 稳定性。
香港HK 华南与东南亚协作团队 充足 充足 适合需要兼顾多个亚洲协作位置的团队评估。
美国东部US-E 北美东部与西欧团队 充足 充足 适合仓库、制品服务或主要成员靠近北美东部的工作流。
01

先看交互连接

频繁使用 VNC 时,优先考虑开发者到节点的稳定性;仅由流水线自动执行时,仓库和制品服务的位置更重要。

02

再看数据流向

依赖下载、仓库拉取和产物上传都会占用链路。把主要数据源与执行节点放在连接更稳定的路径上。

03

迁移通过工单申请

提交当前设备标识、现节点、目标节点、期望时间范围和迁移原因。处理结果与后续步骤以控制台工单记录为准。

升级人工支持

指南无法解决时,提交一份可复现的问题记录

技术问题优先使用控制台工单,以便关联设备与订单。无法登录控制台,或需要进行售前、账单、安全与团队部署咨询时,可发送邮件。

控制台工单

适合连接中断、设备状态、构建环境、节点迁移、订单与账单问题。工单应关联当前设备或订单,并提供可复现信息。

  • 设备标识与当前节点
  • 问题发生的时间范围
  • 执行步骤与预期结果
  • 错误原文和脱敏日志
  • 已经完成的排查项目
登录控制台提交工单

支持邮箱

适合无法登录控制台、售前配置评估、团队部署、安全报告与一般咨询。主题中写明问题类型,正文避免包含密码、私钥或完整令牌。

  • 联系姓名与工作邮箱
  • 咨询类型与目标工作流
  • 期望节点与构建并发
  • 安全报告的复现步骤与影响范围
  • 账单问题对应的订单标识和加购项目
support@minirents.com
账单信息

提交账单问题时写清四项内容

提供订单标识、租用周期、节点,以及存储扩展或 Thunderbolt 5 并联项目。仅支持 USDT-TRC20 与 Visa / Mastercard / Amex(经 Stripe),所有费用以美元(USD)结算,实际可用网关以后端接口返回为准。

准备开始构建

选择独享云端 Mac,把第一条流水线跑通

两档机型、四种租用周期与五个节点可选。设备为独享物理机、非虚拟机,入口价为 $21.5/天。