オファー

WWDC 2026 後、CI が崩れる:macOS beta が iOS ビルドを不安定化する理由と分離策

CI iOS ビルド · WWDC 2026
2026-06-09 約 5 分

ビルド遅延、署名の間欠失敗、同一 commit の再実行成功——多くはコードではない。macOS beta が CI に入った。本番 CI を固定し、beta は専用 Mac mini で検証

30秒で要点

  1. 根因:macOS beta はもはや「テスト用イメージ」ではなく、CI の実行レイヤーそのもの。
  2. 症状:同一 commit がローカル成功→CI失敗→再実行成功。flaky test として潰さない。
  3. 対策:本番 CI は安定版 macOS に固定。beta は専用 Mac mini で PASS/FAIL だけ返す。
WWDC 2026 後の macOS beta が iOS CI 安定性に与える影響

1. 何が変わったか

WWDC 2026 以降、macOS 27 betaXcode 18 beta はセットで届きます。新 SDK を検証するには CI ホストも beta 列車に乗る必要があり、パイプラインはもはや:

code → build → test → artifact

ではなく、こう見えます:

code + Xcode beta + macOS beta + Simulator + Keychain → build

問題は diff ではなく、beta がランタイムになったこと。しかも beta は毎週変わる。

2. 4つの失敗パターン(WWDC 後)

メカニズム現場で見えること
Xcode が macOS beta に拘束Runner で版固定できない。ローカル安定版と CI beta が一致しない
Simulator のジッターコールド起動 +30–80%、UI テストがタイムアウト、カーネルスケジューリングが揺れる
署名 / Keychain ドリフト間欠的な codesign 失敗が再実行で通る—— 署名ガイド
Swift ツールチェーンの厳格化増分ビルドでファイル取りこぼし。clean build が必要

3. 見覚えのある症状

  • 時間ドリフト:同一 commit で xcodebuild が 18 分→37 分に跳ねる
  • 結果ドリフト:ローカル緑→CI 赤→再実行緑(環境ノイズでありテスト flakiness ではない)
  • 偽の安心:CPU は暇、スタックトレースも薄いのにテストがランダム失敗

これは CI がローカルより 2–3 倍遅い理由 とは別件。あちらはキャッシュ調整、こちらは OS レベルの不確実性——YAML では直せない。

4. 対策:beta 実行分離

本番 CI に beta を入れない。捨てられる Mac mini で走らせ、結果だけ返す。

安定 CI(リリース macOS + Xcode)
        ↓
リモート Mac mini(beta のみ)
        ↓
PASS / FAIL + IPA を返す

4ステップ:

  1. beta 専用 Mac mini を用意(別ユーザー + Keychain)
  2. メイン Runner は安定版 macOS に固定(merge / release 用)
  3. 分離ノードに beta スタックを入れ、[beta, ios] ラベルか夜間 SSH で起動
  4. 結果のみ返却——beta キャッシュを本番 Runner に載せない

Runner ラベルは Mac mini セルフホスト Runner ガイド。リリーススプリントの beta マトリクスは 一時ビルドマトリクス を参照。

5. どれを選ぶか

アプローチ安定性判定
日常 Mac に beta❌ Keychain 汚染、ロールバック困難
GitHub-hosted runner⚠️ キュー待ち + beta イメージ遅れ⚠️ 補助のみ
VM / スナップショット❌ Simulator GPU 不安定
リモート Mac mini beta ノード✅ 分離・使い捨て可能

6. FAQ

macOS beta は CI に影響する?

はい。Simulator、ツールチェーン既定、署名が揺れ、同一 commit の結果が反転します。

日常 Mac で beta CI を回せる?

個人検証なら可。共有・本番ビルド機では避ける

GitHub Actions だけで足りる?

キュー緩和には有効だが、beta の非決定性は消せない

ベストプラクティスは?

専用 beta Mac mini + 本番 CI 固定。WWDC 後の本質は環境の制御不能であり「ビルド失敗」ではない。

48時間で分離を検証

本番 Runner 固定 → 同一 commit で夜間 beta ノード → PASS 率比較。本線が安定・beta が揺れれば分離成功。 オンボーディングチェックリスト · プラン