归档与导出
保留 .xcarchive、导出配置与 dSYM。先验证 Release 配置、版本号和构建号,再执行导出;不要只保留最终 .ipa 而丢掉排查崩溃需要的符号文件。
验收点:产物能对应到唯一提交与构建号。
用多台独享物理 Mac 搭建 iOS 打包农场。把不同 scheme 分派到 macOS runner,分别完成归档、签名与 TestFlight 上传,不再让所有任务挤在同一台工作电脑上。
ArmRDP 提供整台 Mac mini,非虚拟机。三档配置、5 个节点,$21.1/天起;先迁一条流水线,再按实际队列扩展。
夜间出包需要先完成 runner、签名与上传配置;交付耗时由项目、依赖和任务队列决定。
按 scheme 隔离任务,按节点汇集产物。
把云端 Mac 注册为 GitLab 或 GitHub Actions 的 macOS self-hosted runner。仓库仍按团队现有方式管理,只把需要 macOS 的 job 定向到这台物理节点。
记录 Xcode 完整版本、SDK、命令行工具路径和依赖锁文件。用 xcodes 管理多个 Xcode 版本,再为每个 job 指定 DEVELOPER_DIR,避免不同项目争用同一个全局选择。
runner 标签至少表达系统、工具链和用途,例如 macos、xcode-pinned、ios-release。发布任务只匹配受信任的 runner;未经审查的分支不要进入持有签名材料的执行环境。
起步时每台机器只接一个重型构建任务。观察冷构建、缓存命中、内存压力和磁盘增长,再决定提高并发还是增加节点。机器数量不是唯一变量,缓存与任务拆分同样影响队列。
xcodebuild -version
xcode-select -p
xcrun --sdk iphoneos --show-sdk-version
xcodebuild \
-workspace App.xcworkspace \
-scheme App \
-configuration Release \
-archivePath artifacts/App.xcarchive \
archive
将 App 工作区与 scheme 替换为项目实际名称。归档产物、构建日志和测试结果按 job 独立保存;不要让两个任务写入同一个输出目录。
面向 App Store 上架,把构建产物与对应的提交、工具链、签名配置关联起来。云端 Mac 承担执行环境,发布权限与审核材料仍由团队管理。
保留 .xcarchive、导出配置与 dSYM。先验证 Release 配置、版本号和构建号,再执行导出;不要只保留最终 .ipa 而丢掉排查崩溃需要的符号文件。
验收点:产物能对应到唯一提交与构建号。
通过受控方式导入分发证书与描述文件,为构建任务使用独立 Keychain。若采用 fastlane match,限制仓库访问权限,并把解密材料放入 CI 密钥存储,而不是写进脚本。
验收点:非交互任务能够完成 codesign。
使用团队授权的上传凭据提交产物。通过图形界面检查模拟器画面并生成审核素材,核对目标设备、语言和版本;上传完成与审核通过是两个不同阶段。
验收点:上传结果、素材和日志一并归档。
发布 job 应限制触发分支与操作者。证书到期、描述文件不匹配或上传权限不足,需要按日志分别处理;增加机器配置不能解决这些问题。
独享物理节点原生运行 macOS,Metal 与模拟器可用于相应开发任务。SSH 负责脚本和日志,VNC 屏幕共享负责 Xcode、模拟器与界面检查,两种接入方式各做擅长的事。
固定版本编译、自动化测试、模拟器截图和依赖安装,都可以脱离本地工作电脑执行。交互排查时,先在图形界面复现,再把能够重复的步骤收进脚本。
先核对目标系统、模拟器 runtime 与 Xcode 版本是否匹配。
远程画面的响应取决于网络路径、分辨率和编码设置,不等同于本地显示器。涉及外接设备、特定外设或高频交互的工作,先按天运行真实任务,再决定是否迁移。
ArmRDP M4 Pro 配备 M4 Pro、64GB 统一内存与 2TB SSD。适合在独享环境中做本地模型加载、量化版本对照和推理接口验证,再判断是否值得继续投入。
模型文件大小不等于运行内存。权重之外还要计入 KV cache、上下文长度、运行框架和其他进程;先从目标模型的小上下文开始,记录峰值内存与内存压力,再逐步增加请求量。
使用支持 Apple Silicon 的推理框架,并确认具体算子与模型格式的兼容性。统一内存不是任意模型都能运行的保证,也不能直接推导出生成速度;用自己的提示词、上下文和输出长度做验收。
推理实验与正式发布构建尽量分开调度,避免争用内存影响结果。远程接口应使用认证与受限访问,不直接公开监听端口。
不要第一次就迁走整套发布系统。选一个依赖明确、能在本地稳定出包的 scheme,把本地结果作为对照,依次通过下面三道验收。
通过只读或最小权限凭据拉取仓库,核对子模块、私有依赖与大文件。证书、描述文件和解密密钥分别管理,不把敏感文件提交到代码仓库。
通过条件:同一提交的数据与依赖齐全。
用 xcodes 安装并锁定项目需要的 Xcode。保存 Homebrew 依赖清单与包管理锁文件,补齐目标模拟器 runtime,记录环境变量和执行路径。
通过条件:手动执行可以得到预期产物。
注册 runner、设置标签与仓库权限,把首条流水线定向到云端 Mac。成功后再加入签名和上传阶段,最后扩展到其他 scheme 与独立节点。
通过条件:无人值守任务可重复完成。
迁移期间保留原有 runner,直到冷构建、签名、上传与失败重试都验证完成。租期结束前导出需要保留的数据,不将节点磁盘当作唯一归档位置。
下面按每日任务量给出起步建议,不是吞吐测试或出包承诺。一次大型全量编译可能比多次增量构建更重;同时记录单次耗时、缓存命中和峰值内存,再决定纵向升级或横向加机。
| 每日任务量参考 | 起步机型与规格 | 优先验证什么 | 按天租用 |
|---|---|---|---|
| 1–5 次 临时验证、单项目起步 |
ArmRDP M4 Base M4 / 16GB / 256GB |
先跑归档与签名闭环;关注依赖安装、DerivedData 和产物对磁盘的占用。 | $21.1/天租用 M4 Base |
| 6–20 次 持续集成、频繁迭代 |
ArmRDP M4 Plus M4 / 24GB / 512GB |
核对编译与测试共存时的内存压力;先优化缓存,再判断是否需要多台 runner。 | $41.4/天租用 M4 Plus |
| 21 次及以上 多目标、重型任务评估 |
ArmRDP M4 Pro M4 Pro / 64GB / 2TB |
验证大项目或模型实验的资源需求;若瓶颈是排队,将独立任务拆到多台节点。 | $59.5/天租用 M4 Pro |
5 个节点为新加坡、日本(东京)、韩国(首尔)、香港、美国西部,三档机型均覆盖。图形交互优先比较团队到节点的连接体验;无人值守构建则同时检查仓库、依赖下载与产物上传路径。实际可用状态以控制台实时返回为准。
验证阶段按天开始;固定发版节奏再比较周、月、季价格。支持 USDT-TRC20 与 Visa / Mastercard / Amex(经 Stripe),统一美元结算,实际可用网关以后端返回为准。
带上一个 scheme、一组签名配置和明确的验收标准。跑通归档、签名与交付后,再为更多任务安排节点。