办公室自建 Mac mini
构建频率低、已有闲置 Mac 时更省
适用
- 偶尔才打包一次,手上已有闲置 Mac。
- 有人愿意管理电源、网络与系统更新。
- 代码或依赖必须留在公司内网。
不适用
- 每天多次合并,夜间构建不能依赖办公室供电。
- 网络波动频繁,重启设备总要找人到场。
- 希望把硬件值守从发布工程的职责里移走。
独享物理 Mac mini,不是虚拟机,没有计划停机。iOS 构建机放在新加坡、东京、首尔、香港、美国西部 5 个机房,整台只给你一个团队用。
tokyo-node-07 · Apple Silicon M4 Pro · 64GB 统一内存 · 2TB SSD
nightly 示例任务:UI 测试 2h05m。不同分支共用本团队的 CPU、内存与磁盘;并发数量仍需按工程实测。
全年运行,不随办公室作息关机。以下是普通年 365 天的服务安排示意,不是历史可用率报告。
硬件异常仍可能发生。请保留独立备份,并通过登录后的控制台工单协助排查与换机。
排班、耗时与在线点为产品示意,不代表实测数据。实际可用状态以控制台实时返回为准。
这些工具按各自常规方式安装在节点上,用法与在你自己的 Mac 上一致。列出只说明运行方式,不代表合作或背书;工具版本、依赖与 runner 更新仍由你的团队管理。
三种做法都有人在认真使用。把适用和不适用并列写出,先对号入座,再决定要不要租一台 iOS 构建机。
电源、网络和散热由机房负责。夜间 nightly 不再因为办公室断电被跳过。
节点不随办公室作息开关机。
不为服务方定期停机另排构建日程。
新加坡、东京、首尔、香港、美国西部。
不把同一台设备分给其他客户。
取舍说明:全年运行不等于硬件不会出故障。发生异常时,先通过工单提交节点与错误信息,再协助排查、更换节点及恢复环境。代码、签名材料、构建产物与必要缓存,请保留独立备份;换机后的 runner 绑定与环境恢复仍需要团队配合。
看换机流程不是虚拟机,也不切分给其他客户。下面四件事,是独享物理机和共享方案的直接差异。
节点登记在你的账户下,租期内不会分配给第二个团队。团队内部可以接入多名开发者或多条流水线。
构建直接跑在 Apple Silicon 物理机上。macOS 图形界面和命令行完整可用,按项目需要管理工具与依赖。
DerivedData、CocoaPods 与 SPM 缓存不会被其他客户的任务清掉。你仍需设置清理策略,避免归档和缓存占满 SSD。
main 与 release 同时构建时,只和本团队任务分资源。独享不代表无限并发,模拟器和编译任务仍共享整机容量。
两种芯片对应三档节点。单 App 项目先从 M4 试跑,大型多 target 工程、更多并发测试与模型推理,再评估 M4 Pro 64GB。
对应 Port M4 Base 与 Port M4 Plus
对应 Port M4 Pro
每档都是整台独享物理 Mac mini,均提供 5 个区域。按天适合试跑流水线,按月或按季适合常驻 nightly;实际可用状态以控制台实时返回为准。
Apple Silicon M4 · 16GB 统一内存 · 256GB SSD
$19.7/天
适合单 App、少量打包;先确认完整归档的磁盘与内存峰值。
租用 Port M4 BaseApple Silicon M4 · 24GB 统一内存 · 512GB SSD
$40.3/天
适合日常开发、多分支构建与模拟器测试;按实测安排并发。
租用 Port M4 PlusApple Silicon M4 Pro · 64GB 统一内存 · 2TB SSD
$61.4/天
适合大型多 target 工程、更多测试任务和本地模型推理。
租用 Port M4 ProUSD 结算 · 支持 USDT-TRC20 与 Visa / Mastercard / Amex(经 Stripe)。实际可用网关以后端返回为准。
对照选型表同时考虑代码仓库、依赖下载源与产物接收端的位置,不只看开发者所在地。同档位区域间价格一致。下列延迟为区域参考区间,不是你的线路实测或连接承诺。
在 Windows 上照常写代码、提交和推送。构建交给独享节点上的 runner:拉取代码,用 xcodebuild 或 fastlane gym 生成 ipa,再把产物回传到流水线。开发终端不需要换成 Mac。
需要 macOS 构建环境,但不需要你在办公室放一台。节点装好 Flutter、Xcode 与项目依赖后,远程执行 flutter build ipa,使用你导入的证书和描述文件完成签名。
签名前提:你仍需具备有效的 Apple 开发者计划资格,并自行准备签名证书、描述文件与 App Store Connect API Key。租用节点提供构建环境,不替代这些发布条件。
保留现有开发环境,将变更推送到团队仓库。
git push origin main
注册自托管 runner,并用标签把 macOS 任务送到对应节点。本团队的任务仍需设置合理并发。
runs-on: [self-hosted, macOS, osxport]
导入证书、描述文件并配置签名。机密放入 CI 的安全变量,不写入代码库。
flutter build ipa --release
通过 App Store Connect API Key 配置自动上传,把错误日志和产物位置返回流水线。
fastlane pilot upload
以下是典型场景的自述示例,用来帮助选型,不是具名客户评价,也不是性能测试结果。
节点在机房全年 365 天在线运行,没有计划停机。硬件异常仍可能影响任务;请登录控制台提交工单,说明节点、故障现象和最近操作,配合排查与换机。运行安排不是历史无故障记录。
可以按流水线需要管理 Homebrew、Xcode 和项目依赖。切换 Xcode 前先确认 SDK 与项目要求,将工具版本写入构建记录;不要让多个任务同时修改同一套全局环境。
用月价除以日价即可比较。Port M4 Base 按天 $19.7、按月 $98.5,按目录价格折算,五个日付周期与一个月付周期的费用相同;预计继续使用时,选月付更合适。周期起止与续费规则请在下单时核对。
统一以美元(USD)结算,仅支持 USDT-TRC20 与 Visa / Mastercard / Amex(经 Stripe)。以结账时后端返回的可用网关为准。付款前核对订单、金额和支付网络。
可以在团队内部共用,例如多个开发者和多条流水线使用同一台节点;不会分配给其他客户。请为构建目录、签名材料和 runner 权限做隔离,并限制同时运行的编译与模拟器任务。
从成本取舍到构建环境,把需要反复核对的事项整理成文章,便于团队在接入前一起阅读。
用可运行的 Swift 脚本实现并查集,再以图遍历作为独立参照,验收连通性、重复合并与组件计数。
CI/CD 实践用可直接运行的 Swift 样本建立依赖图契约,固定同级顺序,并区分未知依赖、环成员与被环阻塞的任务。
CI/CD 实践用可运行的 Swift 测试验收布隆过滤器,区分无假阴性契约、误报统计与跨进程快照兼容性。
新稿筹备中,先看博客列表。