为团队安排构建资源

按流水线挑节点

从单 App 日常 CI 到 Unity 出包,两档机型覆盖。

先分清任务是每天运行,还是只在发版时集中出现,再看内存、缓存与并行需求。VMFly 提供整机独享的物理 Apple Silicon Mac mini,非虚拟机;一台节点只交给一个客户,不与其他租户争用同一台主机的构建资源。

  • 起租价格 $20.1/天
  • 芯片选择 Apple Silicon M4 / M4 Pro
  • 计费周期 天 / 周 / 月 / 季
日常构建 · 长期节点

把共享队列换成团队自己的执行器

每天都要跑的单 App 流水线,可以先从 Glide M4 月付节点开始:Apple Silicon M4、16GB 内存、256GB SSD,$100.7/月。将 GitHub Actions 的 macOS 任务指向自己的 runner,便不必等待其他租户在共享主机上的任务结束。

先迁一条可复现的工作流

选一条已有稳定结果的构建链路,记录提交版本、Xcode 版本、依赖锁文件与签名方式。先完成一次干净构建,再打开缓存;否则旧缓存可能掩盖环境差异。

  1. 在节点上安装并注册团队的 self-hosted runner。
  2. 为执行器设置项目专属标签,例如 vmfly-ios,并限制可调用的仓库。
  3. 对同一提交分别运行旧链路与新节点,核对测试结果、归档配置和产物。

适合固定分支检查、夜间打包与每天重复执行的回归任务。

独享资源不等于无限并发

整机独享消除了其他租户的资源竞争,但团队自己提交的任务仍需安排队列。不要在迁移第一天就把所有 job 同时压到一台机器上。

  • 从一个执行任务开始,观察构建峰值内存、磁盘剩余空间与缓存增长。
  • 为归档任务和 UI 测试区分标签,避免同一工作目录被同时写入。
  • 先用实际工程验证 16GB 内存是否合适,再决定增加节点或改选机型。

验收标准不只是一条绿色状态:还应确认产物能被团队下载、日志能保留、runner 在重启后能恢复运行。月付适合持续使用,不代表所有工程都需要整月开机。

发版扩容 · 按天安排

让归档与 UI 测试分开占用节点

发版周的瓶颈往往集中在几个工作日。按天增加一台 Cruise M4 Pro,$61.5/天,使用 Apple Silicon M4 Pro、64GB 内存与 2TB SSD 承接 UI 测试或归档;原有节点继续执行日常检查,不必为了短期高峰长期增购硬件。

扩容前先拆任务边界

一台机器承接归档,另一台承接测试,才是清晰的资源分工。只是增加 runner 数量、却让所有任务继续等待同一个串行阶段,不会自动缩短发版链路。

  • 固定同一个提交版本,分别生成归档任务与测试任务。
  • 明确产物命名与上传位置,防止不同分支相互覆盖。
  • 记录环境初始化步骤,临时节点也能从配置文件重建。

先测关键路径,再增加并发;不承诺未经实测的构建提速倍数。

发版结束前完成交接

短期节点的结束条件应写进发版清单:最后一轮验证完成、产物已回传、诊断日志已保存,然后再结束租期。停止使用 runner 不等于取消后续计费安排,需在控制台核对订阅状态与到期时间。

  • 导出需要保留的归档、测试报告与失败日志。
  • 从代码托管平台移除临时 runner 的注册。
  • 撤销临时令牌,并在到期前完成数据备份。
Unity iOS · 导出与归档

把工程导出到 IPA 做成一条链路

Unity 导出的 Xcode 工程、依赖安装、签名与 IPA 归档应在同一套可追溯环境中执行。Cruise M4 Pro 的 64GB 内存与 2TB SSD 为大型工程、资源导入和构建缓存提供空间,但具体容量与任务并发仍要按项目验证。

  1. 01

    锁定导出环境

    记录 Unity 编辑器版本、项目依赖和 iOS 导出设置;用固定提交生成 Xcode 工程,避免本地与节点的编辑器版本不同。

  2. 02

    校验签名与归档

    检查目标、构建配置、描述文件与导出方式。将签名材料通过团队批准的凭据流程提供给任务,不写进代码仓库或公开日志。

  3. 03

    分离缓存与交付物

    缓存可以重建,发布产物必须留存。给 Unity 中间文件、DerivedData 与历史归档分别设置目录和清理规则,避免长期积累挤满系统盘。

交互任务 · 先验证再长期使用

调试需要桌面,实验需要可重复环境

不只是无人值守打包。登录控制台后,可以在浏览器中打开节点的 macOS 远程桌面,直接使用 Xcode 调试;也可通过 SSH 执行脚本,在 Apple Silicon 上验证本地模型推理工作流。

远程开发先看交互延迟

频繁点击模拟器、检查界面或单步调试时,网络往返比后台构建更容易影响感受。机房可选新加坡、日本(东京)、韩国(首尔)、香港;先从靠近团队的节点试用,再决定长期使用位置。

  • 在自己的办公网络下检查文字清晰度、操作反馈和文件传输。
  • 将日常编辑与长时间归档错开,减少团队内部资源竞争。
  • 多人使用同一节点时,先约定桌面操作与凭据管理规则。

浏览器桌面用于交互,SSH 用于自动化;两者可以服务同一套工程。

AI 实验先核对内存占用

选型应依据模型文件、推理精度、上下文长度与同时运行的工具,而不是只看模型名称。先用短周期完成环境安装和样例验证,再决定采用 Glide M4 还是 Cruise M4 Pro。

  • 确认依赖支持 Apple Silicon,并记录安装版本与启动参数。
  • 观察真实运行时的内存压力,不把 SSD 容量当成内存容量。
  • 保存输入、参数与输出,便于迁移到新节点后复现实验。

64GB 内存不是所有模型都能运行的保证,兼容性与容量须由实际任务验证。

流水线检查 · 签名到分发

让每个出包阶段都留下可定位的结果

下面是 fastlane 流程的示意节选,不是节点实测记录。团队需自行配置签名仓库访问权限、项目 scheme、应用标识与分发凭据。先让每一步独立成功,再把它们串进无人值守任务。

cruise-m4pro — fastlane
$ bundle exec fastlane match appstore --readonly
[match] Fetching signing certificates and profiles
[match] Installing signing assets into the build keychain
[match] Signing assets are ready

$ bundle exec fastlane gym --scheme "$SCHEME" --export_method app-store
[gym] Archiving the selected scheme
[gym] Exporting the archive
[gym] IPA export completed

$ bundle exec fastlane pilot upload --ipa "$IPA_PATH"
[pilot] Uploading the selected IPA
[pilot] Upload completed; processing continues on TestFlight

match:只取所需凭据

CI 使用只读方式获取既有签名材料。若无法访问签名仓库,先排查授权;不要在日志中输出私钥、令牌或解密密码。

gym:区分归档与导出

归档成功不代表 IPA 导出成功。保留归档日志,分别核对 scheme、签名配置与导出参数,避免把两个阶段混成同一种失败。

pilot:上传不是处理完成

上传结束后仍需等待分发平台处理。保存上传结果并检查处理状态;不要把网络上传成功直接标记为团队验收通过。

每天 20 次构建 · 部署方式对照

比较资源归属,也比较谁负责运维

假设中小团队每天触发 20 次构建。这个数字用于说明任务频率,不代表性能测试,也不能单独推导需要几台机器。还应记录单次耗时、同时触发量、缓存命中率与发版高峰,再比较下面三种部署方式。

同一条 iOS 流水线的部署选择;具体能力与交付条件需按实际平台核对。
决策维度 租用 VMFly 物理节点 自购 Mac 硬件 共享虚拟机
成本结构 按天、周、月或季租用。Glide M4 为 $100.7/月,附加项另计。 一次性购机,另承担上架、网络、电力及日常管理投入。 按平台周期或用量结算;需同时核对排队规则与并发配额。
交付路径 支付确认后分配物理机;实际可用状态以控制台实时返回为准。 需要完成采购、到货、联网与远程访问配置。 按平台资源调度;是否排队及环境持久性取决于具体服务。
独享性 整台 Mac mini 只交给一个客户,非虚拟机。 硬件由团队独享,同时由团队负责现场与系统管理。 通常与其他实例共享宿主资源,隔离与资源分配由平台实现。
升级弹性 可重新选择机型或增加节点;环境与数据迁移需自行安排。 扩容通常涉及新增硬件与部署,原有机器继续占用资产预算。 可选规格与扩容方式受平台目录及调度规则限制。

先用同一提交做一次选型验证

每天 20 次短构建,可能更需要稳定缓存;少量耗时很长的 UI 测试,可能更需要拆分执行节点。不要仅凭构建次数升级机型。拿同一工程分别检查耗时、内存与磁盘占用,再判断是长期保留一台 Glide M4,还是在发版阶段增加 Cruise M4 Pro。

VMFly 负责提供独享物理节点;团队仍需管理项目依赖、runner 权限、签名材料与产物备份。如果你需要完全托管的流水线编排,应先核对这些工作是否已由团队现有工具承担。

按你的场景选方案

日常构建看持续负载,临时扩容看使用天数。先核对两档规格与四种周期,再为流水线安排节点。