今晚的 iOS 构建,交给一台云端 Mac

独享物理机,非虚拟机。5 个节点,按天/周/月/季计费,$21.1/天起

从一台开始,当天接入构建流程;实际可用状态与交付信息以控制台返回为准。

打包潮汐 · 一次 .ipa 交付scheme App-Prod · Release · 示例用时 19 分钟
东京 · ArmRDP M4 Plus
时刻 21:04拉取代码git fetch · main
时刻 21:11xcodebuild archiveXcode 16.2 · arm64
时刻 21:17codesign 与导出Distribution · .ipa
时刻 21:23上传 TestFlightfastlane pilot

示例流程,非实时数据构建耗时随工程、依赖与缓存而变

runner · tko-plus-02GitHub Actions self-hosted · 示例配置
空闲示意
Xcode16.2 · 版本锁定
macOS15 Sequoia
标签macOS, xcode-16.2
主机独享 Mac mini M4
今晚队列 · 示例3 scheme
App-Prodarchive · 21:11 起
构建中
App-Staging等待 runner
排队
Widget等待 runner
排队
为什么是一台真 Mac

先说三件可以验证的事

iOS 打包机要的是稳定、可复现、随时有空。登录之后,先核对硬件、权限与工具链,再把第一条流水线接进来。

独享物理节点

整台 Mac mini 只给你一人。CPU、统一内存与 SSD 不与其他租户共用,不切分、不超售。构建缓存留在自己的节点上,不必在每次任务开始时重新准备环境。

1 台主机 = 1 个租户

非虚拟机

Xcode、模拟器、Metal 在 macOS 上原生运行。图形界面和命令行都可使用,开发工具不需要绕过虚拟化设备限制。可以自行查看硬件信息,核对 Mac mini 型号。

system_profiler SPHardwareDataType

按天起租

先租一天核对依赖与签名流程;发版冲刺选按周,常驻 runner 选按月或季。周期价格分别列出,不把月价折算成日价充当入口价。

M4 Base:$21.1/天 · $57.1/周 · $105.7/月

硬件写在铭牌上

三档机型的硬件铭牌

全部为 Apple Silicon Mac mini。三档在 5 个节点均在售;内存与 SSD 随机型固定,额外工作空间通过独立附加项选择。

ID m4-16-256

ArmRDP M4 Base

芯片
M4
统一内存
16GB
SSD
256GB
网络接入
SSH / VNC
节点覆盖
全部 5 个节点

独享物理节点 · Mac mini

ID m4-24-512

ArmRDP M4 Plus

芯片
M4
统一内存
24GB
SSD
512GB
网络接入
SSH / VNC
节点覆盖
全部 5 个节点

独享物理节点 · Mac mini

ID m4pro-64-2tb

ArmRDP M4 Pro

芯片
M4 Pro
统一内存
64GB
SSD
2TB
网络接入
SSH / VNC
节点覆盖
全部 5 个节点

独享物理节点 · Mac mini

可加购 +1TB / +2TB SSD 与 Thunderbolt 5 并联。网络参数、工具链版本与交付配置在下单及开通时核对。

查看完整铭牌与附加项
价格

三档机型,按天起租

统一美元结算。每张卡独立切换天、周、月、季;显示的是所选周期的整笔基础租金,不是折算日价。

ArmRDP M4 Base

M4 · 16GB · 256GB

$21.1/天

先跑通一条流水线

适合单 scheme 工程与短期验证。先记录全量构建耗时、缓存占用和峰值内存,再决定是否扩大常驻容量。

租用 M4 Base

ArmRDP M4 Pro

M4 Pro · 64GB · 2TB

$59.5/天

承接更大的内存与工作集

适合大型工程全量构建、模拟器测试与本地模型推理验证。64GB 统一内存与 2TB SSD,为多套依赖和构建产物留出空间。

租用 M4 Pro

入口价 $21.1/天;+1TB SSD 为 $3/天起。附加项单独计费,结账前核对机型、周期、节点与总额。

周期与附加项明细
iOS 构建农场

把一次出包,变成可重复的流程

把 1~N 台云端 Mac 注册为 GitLab 或 GitHub Actions 的 self-hosted runner。先让一条流水线跑通,再把多个 scheme 分发到不同节点。

  1. 01

    先量一条真实构建

    用同一个 commit 记录全量和增量耗时,检查证书、依赖下载与 DerivedData 占用。先以每个 runner 同时执行一个任务为起点。

  2. 02

    注册并分配标签

    按 macOS、Xcode 版本和项目用途命名标签。矩阵任务只有在多台匹配标签的 runner 可用时,才能跨主机同时执行。

  3. 03

    锁定工具链再扩容

    按项目要求自选 Xcode 版本并长期保留。用 DEVELOPER_DIR 指定版本,独立设置归档与缓存路径,避免多个任务相互覆盖。

Xcode 版本号不是可复现构建的全部条件。依赖锁文件、签名材料、导出配置与环境变量也应进入团队的变更记录。

夜间归档任务

GitHub Actions · 配置示例
name: ios-nightly
on:
  workflow_dispatch:
  schedule:
    - cron: "0 13 * * *"
jobs:
  archive:
    runs-on: [self-hosted, macOS, xcode-16.2]
    strategy:
      fail-fast: false
      matrix:
        scheme: [App-Prod, App-Staging, Widget]
    env:
      DEVELOPER_DIR: /Applications/Xcode-16.2.app/Contents/Developer
    steps:
      - uses: actions/checkout@v4
      - name: Archive
        run: |
          xcodebuild archive \
            -workspace App.xcworkspace \
            -scheme "${{ matrix.scheme }}" \
            -configuration Release \
            -archivePath "build/${{ matrix.scheme }}.xcarchive"
      - name: Export
        run: |
          xcodebuild -exportArchive \
            -archivePath "build/${{ matrix.scheme }}.xcarchive" \
            -exportPath "build/export/${{ matrix.scheme }}" \
            -exportOptionsPlist ci/export.plist
时间表达式使用 UTC仓库需包含导出配置与已安装的签名材料

将 workspace、scheme 与 Xcode 路径替换为自己的工程配置。GitLab 同样通过 runner 标签分配任务;证书与密钥通过受保护变量或专用密钥链管理,不写进仓库。

节点

5 个节点,选离团队最近的一个

新加坡、日本(东京)、韩国(首尔)、香港、美国西部,三档机型全部覆盖。先看操作者与仓库所在位置,再核对实际访问链路。

延迟为节点参考区间,不是从你的网络发起的实测结果。SSH 上传下载、仓库拉取与 VNC 画面受各自链路影响;美国西部时区随夏令时变化。全部节点全年 365 天运行,实际可用状态以控制台实时返回为准。

远程接入

两种方式连上你的 Mac

脚本与 CI 走 SSH,调 Xcode 与模拟器走 VNC 屏幕共享。先在控制台查看主机地址与凭据,再按连接文档设置客户端。

SSH · 脚本与 runner

用于安装依赖、注册 runner、查看构建日志。首次登录后修改密码并添加公钥,验证密钥可用后再调整认证设置。

ssh -i ~/.ssh/armrdp admin@<主机地址>

VNC · 图形界面

用于检查 Xcode 设置、密钥链与模拟器。建议通过 SSH 隧道接入,将本地端口转发到主机的屏幕共享服务。

ssh -N -L 5901:localhost:5900 admin@<主机地址>
连接交接单SSH + VNC

同一台 Mac,两条工作路径

图形任务与自动化任务共用同一套工程文件和工具链,不必在两套环境之间复制构建目录。

命令行
本地终端 → SSH → runner

依赖安装、归档命令、日志与产物检查

图形界面
屏幕共享 → macOS → Xcode

工程设置、模拟器、签名与界面调试

隧道建立后的本地连接地址vnc://localhost:5901
连接方式示意,不是运行中桌面的截图。用户名、地址与系统配置以实际交付信息为准。
按团队的工作方式出发

你需要的,可能就是这三句话

用三个角色的第一人称需求,说明该如何安排节点。这些是使用情境示例,不是客户评价或性能统计。

“发版周我想让三条 scheme 各有自己的归档路径。任务能分到不同 runner,就不用一直盯着同一条队列。”

iOS 负责人 · 需求示例

“我希望 Xcode 版本和依赖锁文件一起固定。先在同一个 commit 上核对结果,再把这台 Mac 放进正式流水线。”

CI/CD 工程师 · 需求示例

“我先按天租一台 M4 Base,把证书与 GitLab runner 跑通。知道工程实际占用多少资源,再选长期周期。”

独立开发者 · 需求示例
问答

下单前先核对这四件事

全部问答

是虚拟机吗?

不是。交付的是一台独享物理 Mac mini。租期内,硬件资源不与其他租户切分;可以通过系统信息核对芯片、内存与存储配置。

能同时保留多个 Xcode 吗?

可以按工程需要安装并保留多个版本。构建脚本用 DEVELOPER_DIR 指向指定版本,或用 xcode-select 切换。安装前先确认系统兼容性与剩余磁盘空间。

如何估算并行需要几台?

先用一台主机跑单任务,记录峰值内存、归档耗时和磁盘读写。再决定是增加同机并发还是新增节点。scheme 数量本身不能直接推导出完成时间。

签名文件与构建产物怎么处理?

把证书放入专用密钥链,敏感变量放进 CI 的受保护配置。归档与导出产物同步到团队自己的存储,租期结束前完成备份并撤销不再使用的访问凭据。

支付与结算

两类支付,统一美元结算

先确认周期与配置,再核对订单总额。基础租金与附加项分别列出,实际可用支付网关以后端接口返回为准。

USDT-TRC20Visa / Mastercard / Amex 经 Stripe
  1. 选择机型、节点与周期
  2. 核对 USD 总额并支付
  3. 在控制台查看订单与主机凭据

链上支付前核对网络与收款信息;银行卡支付按网关页面完成。支付状态未确认时,先查看订单,不重复创建同一笔付款。

今天下单,今晚出包

M4 Base $21.1/天起。从一个工程、一台 runner 开始,跑通后再扩展你的 iOS 打包农场。

潮汐卡、runner 与队列展示的是示例流程,不是实时运行数据。下单前请核对控制台的配置、计费周期和实际交付信息;构建耗时取决于你的工程、工具链与缓存。