先迁一条可复现的工作流
选一条已有稳定结果的构建链路,记录提交版本、Xcode 版本、依赖锁文件与签名方式。先完成一次干净构建,再打开缓存;否则旧缓存可能掩盖环境差异。
- 在节点上安装并注册团队的 self-hosted runner。
- 为执行器设置项目专属标签,例如
vmfly-ios,并限制可调用的仓库。 - 对同一提交分别运行旧链路与新节点,核对测试结果、归档配置和产物。
适合固定分支检查、夜间打包与每天重复执行的回归任务。
每天都要跑的单 App 流水线,可以先从 Glide M4 月付节点开始:Apple Silicon M4、16GB 内存、256GB SSD,$100.7/月。将 GitHub Actions 的 macOS 任务指向自己的 runner,便不必等待其他租户在共享主机上的任务结束。
选一条已有稳定结果的构建链路,记录提交版本、Xcode 版本、依赖锁文件与签名方式。先完成一次干净构建,再打开缓存;否则旧缓存可能掩盖环境差异。
vmfly-ios,并限制可调用的仓库。适合固定分支检查、夜间打包与每天重复执行的回归任务。
整机独享消除了其他租户的资源竞争,但团队自己提交的任务仍需安排队列。不要在迁移第一天就把所有 job 同时压到一台机器上。
验收标准不只是一条绿色状态:还应确认产物能被团队下载、日志能保留、runner 在重启后能恢复运行。月付适合持续使用,不代表所有工程都需要整月开机。
发版周的瓶颈往往集中在几个工作日。按天增加一台 Cruise M4 Pro,$61.5/天,使用 Apple Silicon M4 Pro、64GB 内存与 2TB SSD 承接 UI 测试或归档;原有节点继续执行日常检查,不必为了短期高峰长期增购硬件。
一台机器承接归档,另一台承接测试,才是清晰的资源分工。只是增加 runner 数量、却让所有任务继续等待同一个串行阶段,不会自动缩短发版链路。
先测关键路径,再增加并发;不承诺未经实测的构建提速倍数。
短期节点的结束条件应写进发版清单:最后一轮验证完成、产物已回传、诊断日志已保存,然后再结束租期。停止使用 runner 不等于取消后续计费安排,需在控制台核对订阅状态与到期时间。
Unity 导出的 Xcode 工程、依赖安装、签名与 IPA 归档应在同一套可追溯环境中执行。Cruise M4 Pro 的 64GB 内存与 2TB SSD 为大型工程、资源导入和构建缓存提供空间,但具体容量与任务并发仍要按项目验证。
记录 Unity 编辑器版本、项目依赖和 iOS 导出设置;用固定提交生成 Xcode 工程,避免本地与节点的编辑器版本不同。
检查目标、构建配置、描述文件与导出方式。将签名材料通过团队批准的凭据流程提供给任务,不写进代码仓库或公开日志。
缓存可以重建,发布产物必须留存。给 Unity 中间文件、DerivedData 与历史归档分别设置目录和清理规则,避免长期积累挤满系统盘。
不只是无人值守打包。登录控制台后,可以在浏览器中打开节点的 macOS 远程桌面,直接使用 Xcode 调试;也可通过 SSH 执行脚本,在 Apple Silicon 上验证本地模型推理工作流。
频繁点击模拟器、检查界面或单步调试时,网络往返比后台构建更容易影响感受。机房可选新加坡、日本(东京)、韩国(首尔)、香港;先从靠近团队的节点试用,再决定长期使用位置。
浏览器桌面用于交互,SSH 用于自动化;两者可以服务同一套工程。
选型应依据模型文件、推理精度、上下文长度与同时运行的工具,而不是只看模型名称。先用短周期完成环境安装和样例验证,再决定采用 Glide M4 还是 Cruise M4 Pro。
64GB 内存不是所有模型都能运行的保证,兼容性与容量须由实际任务验证。
下面是 fastlane 流程的示意节选,不是节点实测记录。团队需自行配置签名仓库访问权限、项目 scheme、应用标识与分发凭据。先让每一步独立成功,再把它们串进无人值守任务。
$ 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
CI 使用只读方式获取既有签名材料。若无法访问签名仓库,先排查授权;不要在日志中输出私钥、令牌或解密密码。
归档成功不代表 IPA 导出成功。保留归档日志,分别核对 scheme、签名配置与导出参数,避免把两个阶段混成同一种失败。
上传结束后仍需等待分发平台处理。保存上传结果并检查处理状态;不要把网络上传成功直接标记为团队验收通过。
假设中小团队每天触发 20 次构建。这个数字用于说明任务频率,不代表性能测试,也不能单独推导需要几台机器。还应记录单次耗时、同时触发量、缓存命中率与发版高峰,再比较下面三种部署方式。
| 决策维度 | 租用 VMFly 物理节点 | 自购 Mac 硬件 | 共享虚拟机 |
|---|---|---|---|
| 成本结构 | 按天、周、月或季租用。Glide M4 为 $100.7/月,附加项另计。 | 一次性购机,另承担上架、网络、电力及日常管理投入。 | 按平台周期或用量结算;需同时核对排队规则与并发配额。 |
| 交付路径 | 支付确认后分配物理机;实际可用状态以控制台实时返回为准。 | 需要完成采购、到货、联网与远程访问配置。 | 按平台资源调度;是否排队及环境持久性取决于具体服务。 |
| 独享性 | 整台 Mac mini 只交给一个客户,非虚拟机。 | 硬件由团队独享,同时由团队负责现场与系统管理。 | 通常与其他实例共享宿主资源,隔离与资源分配由平台实现。 |
| 升级弹性 | 可重新选择机型或增加节点;环境与数据迁移需自行安排。 | 扩容通常涉及新增硬件与部署,原有机器继续占用资产预算。 | 可选规格与扩容方式受平台目录及调度规则限制。 |
每天 20 次短构建,可能更需要稳定缓存;少量耗时很长的 UI 测试,可能更需要拆分执行节点。不要仅凭构建次数升级机型。拿同一工程分别检查耗时、内存与磁盘占用,再判断是长期保留一台 Glide M4,还是在发版阶段增加 Cruise M4 Pro。
VMFly 负责提供独享物理节点;团队仍需管理项目依赖、runner 权限、签名材料与产物备份。如果你需要完全托管的流水线编排,应先核对这些工作是否已由团队现有工具承担。