按工作流选,不按参数猜

一台云端 Mac,四种用法

给你的开发流程补上一台独享 Apple Silicon 物理节点。非虚拟机,可用 SSH 与 macOS 图形界面;从一次打包,到常驻流水线,再到统一内存上的推理实验。

三档机型,五个节点。Shell M4 按天 $21.8 起,先用自己的项目验证。

01 / BUILD

主力机不换,
把 Xcode 留在云端

平时在 Windows 或 Linux 写代码,需要发布时,把仓库同步到云端 Mac,再通过 SSH 执行构建。需要检查工程设置、模拟器或签名配置时,切换到 macOS 图形界面,不必把日常开发环境整个搬走。

Shell M4 适合先验证单个项目的编译与归档流程。16GB 统一内存是否够用,要看工程规模、模拟器数量与同时运行的工具;先记录峰值内存和一次干净构建耗时,再决定是否换档。

  • 确认工程锁定的 Xcode 版本和依赖版本,避免本地能过、远端失败。
  • 先跑一次不带签名的编译,再配置你有权使用的证书与描述文件。
  • 归档成功不等于发布完成;签名权限、分发权限与产物验证需要单独检查。
02 / AUTOMATE

给 macOS 构建,
一个常驻的 Runner

将独享物理节点注册为 GitLab 或 GitHub 的 self-hosted runner,让提交、测试、归档和产物回传进入同一条流水线。节点全年 365 天正常运行;任务调度、进程守护与构建清理由团队按项目配置。

推荐使用 24GB 统一内存与 512GB SSD 的 Shell M4 Plus:为依赖解析、编译与测试留出余量,并保存仓库、依赖缓存和构建产物。并发先设为 1,观察 CPU、内存压力与磁盘增长后再调高,不把逻辑并发直接当作吞吐量。

  • 用专门的 macOS 用户执行 CI,避免和人工桌面操作共用工作目录。
  • Runner 标签同时标注 macOS、芯片架构与 Xcode 版本,避免作业误投。
  • 需要图形会话或签名钥匙串的任务,先在相同用户会话中验证权限。
  • 仅让可信仓库提交到持有发布凭据的 Runner,隔离外部贡献代码。
03 / VERIFY

把夜间测试变成可回看的结果

fastlane 组织任务,XCUITest 执行 UI 测试,结果包保留失败上下文。先把测试环境固定下来,再谈扩大设备覆盖。

先用模拟器跑回归

安装项目需要的模拟器运行时,固定目标设备与系统版本。先用 xcrun simctl list devices available 查看可用目标,再把实际设备标识写入测试配置。

夜间任务保存 .xcresult、截图与日志。出现失败先区分产品缺陷、测试脚本不稳定和环境问题,不用无限重试掩盖原因。

适合:提交检查与夜间回归

iOS 真机需要单独确认

租到物理 Mac 不等于租到 iPhone 或 iPad。本服务目录不包含 iOS 设备,也不默认承诺设备接入;下单前先说明设备归属、连接方式与测试工具。

你电脑上的 USB 设备不会因为 SSH 登录而出现在远端。测试方案需要可达设备、配对与信任关系,以及相应签名权限;先通过邮箱确认可行性。

让每次运行留下结果包

在项目已配置好 fastlane 测试 lane 后执行。结果目录按作业编号区分,测试结束后回传,不长期堆在节点上。

bundle exec fastlane scan \
  --scheme App \
  --result_bundle true \
  --output_directory build/test-results
04 / EXPERIMENT

用统一内存,
验证你的推理假设

M4 Pro 芯片、64GB 统一内存与 2TB SSD 构成 Shell M4 Pro 的配置,适合用 MLX 或 llama.cpp 验证模型加载、量化版本、上下文长度和 Metal 推理路径。CPU 与 GPU 使用统一内存,不等于全部内存都能给模型权重。

选模型时先算权重,再留运行余量。以 4-bit 权重粗估,8B 参数约需 4GB,32B 约需 16GB;这只是参数量乘以每参数 0.5 字节,不包含量化元数据、KV cache、运行时和系统占用。不能据此承诺某个模型一定能加载。

  • 先用短上下文、单请求测首 token 延迟和稳定生成速度,再增加上下文或并发。
  • 记录模型版本、量化格式、工具版本与采样参数,避免把不同配置的输出混作比较。
  • 需要 CUDA 生态或多卡训练的任务,不应直接把这台 Mac 当作同类替代。
从本地到云端

迁移分三步,每一步都能单独验收

不要直接复制整个用户目录。先迁项目,再还原工具链,最后切换作业。以下时间是人工操作的规划估计,不是开通时效;下载、传输与编译耗时另计。

01

数据:先让仓库可重建

操作预算:10–30 分钟,不含传输

首次迁移优先克隆仓库;未提交资源单独增量同步。下方命令在本地执行,cloud-mac 是你已配置的 SSH 别名,仓库地址来自项目自己的环境变量。

ssh cloud-mac 'mkdir -p ~/work'
rsync -av --exclude '.git' \
  ./App/ cloud-mac:~/work/App/
ssh cloud-mac
git clone "$REPOSITORY_URL" ~/work/repo

验收:提交号一致,必要资源齐全;缓存与可重建的构建目录不必迁移。

02

工具链:锁版本与权限

操作预算:20–60 分钟,不含下载

在远端核对 Xcode 路径和 SDK。已有 Brewfile 时用 Homebrew 还原工具;证书与描述文件通过团队批准的安全路径传入,不写进仓库或作业日志。

xcode-select -p
xcodebuild -version
xcodebuild -showsdks
brew bundle --file Brewfile
security list-keychains -d user

验收:依赖版本一致,目标 SDK 可用;在实际执行用户下完成一次签名归档。

03

CI:先试跑,再换标签

操作预算:15–45 分钟,不含构建

使用组织生成的注册信息接入 Runner。以下为 GitLab 命令;GitHub Runner 使用组织提供的配置脚本,并在节点上验证服务状态。令牌仅在可信会话中输入。

gitlab-runner register
gitlab-runner install
gitlab-runner start
gitlab-runner verify

验收:测试分支命中新标签,产物可下载;确认通过后再切正式流水线,保留旧执行端用于回退。

迁移成功的标准不是“能 SSH 登录”,而是同一提交能完成依赖安装、构建、测试和产物回传。任何一步失败,先保留日志,再切下一步。

跨时区交接

共享的是排期,不是一组密码

同一台节点可以由团队分时使用,但 CPU、GPU、内存和磁盘仍是同一组资源。多个系统用户不是虚拟机隔离边界;发布凭据与敏感项目需要更严格的权限设计。

  1. 01

    账号各自持有

    每位成员使用单独的 macOS 用户与 SSH 公钥,避免共享私钥。CI 使用专门账户;有人离开团队时,移除其密钥并复核相关令牌。

  2. 02

    任务按时交接

    排期使用统一时区,交接记录写明提交号、工作目录、正在运行的进程和下一项任务。长任务交给 Runner 或受管理的会话,不靠桌面连接一直开着。

  3. 03

    签名单独管理

    钥匙串权限按执行用户验证,避免把解锁口令写进 shell 历史。交接前确认没有遗留交互式签名提示,不在他人的发布任务中途退出用户会话。

  4. 04

    数据有第二份

    代码推回仓库,产物传回团队存储,凭据另行安全保管。到期前完成备份,不把节点当唯一存档位置;续费与到期信息以控制台显示为准。

NEXT / RUN YOUR PROJECT

先选任务,
再开第一台节点

单项目构建从 Shell M4 起步,团队流水线看 Shell M4 Plus,大内存推理实验选 Shell M4 Pro。进入下单页后确认周期、节点与加购项。

仅支持 USDT-TRC20 与 Visa / Mastercard / Amex(经 Stripe),统一以美元结算。实际可用网关以后端接口返回为准。