DevOps / CI·CD 2026年4月30日

2026-04-30 iOS CI 移行Intel x86_64 から Apple Silicon ARM64レンタル クラウド Mac 上の xcodebuildHK / JP / KR / SG / US

MacXCode エンジニアリングチーム 2026年4月30日 約24分

Apple は依然として Intel 向け Xcode を出しますが、2026 年には多くのモバイルチームが、もう出荷しない x86_64 スライスへのクラウド課金をやめます。キューが古い Intel Mac mini を指したまま製品バイナリが arm64 のみなら、依存グラフの二重維持と遅い xcodebuild test のコールドスタートにお金を払い続けています。香港・東京・ソウル・シンガポール・米国Mac mini M4 ビルダーに既に寄せた競合より不利です。本稿(2026-04-30)は営業文書ではなくリリースエンジニア向けの移行ブリーフです。ファットバイナリの棚卸し、ARCHS の正規化、Apple Silicon スライスを持たない CocoaPods ベンダーの解消、フレークを信頼できるまでの 二系統 マトリクス、既定ルーティングを ARM64 に切り替えつつレガシー CLI 用のブレーカー経路を残す、までを一気通貫で扱います。リモート Archive並列 Xcode複数 Xcode と xcode-select、並列負荷で挙動が変わる Swift 6 厳格並行性 と補完的に読んでください。

スナップショット:「手元の M3 で通る」は十分ではない

ノート PC は罪を隠します。温まったモジュールキャッシュ、Rosetta 越しに透過なツールチェーン、人間の忍耐。CI は数分で露呈させるべきです。移行途中である三つの兆候:

  • リンカエラーundefined symbols for architecture arm64 を言いつつ、ベンダー XCFramework の lipo -archs にまだ x86_64 が残る。
  • シミュレータ宛先のドリフト:Intel 時代の destination が YAML に残り、新しい Xcode バンドルからデバイスイメージが消えている。
  • ランナーラベルの嘘:GitHub Actions や Buildkite のタグが macos-intel のままだがシェルは実際 arm64(運用が名前を流用)。
追跡すべき数値: 中規模アプリで ARM64 正規化後のクリーン xcodebuild build の壁時計を 35% 以上 短縮を目安。Intel 容量を削る前に二重キューを 14 暦日 観測する。

バイナリ棚卸し:Swift を責める前に x86_64 を証明する

Carthage/BuildPods/ThirdParty/ 配下の .framework.a、プリコンパイル XCFramework を歩きます。移行チケットに貼るべき二コマンド:

find . \( -name "*.framework" -o -name "*.a" -o -name "*.xcframework" \) -print0 | xargs -0 -I@ sh -c 'echo "@:"; lipo -info "@" 2>/dev/null || file "@"'

Intel のみのスライスを売るベンダーが見つかったら商取引のスレッドを開き、本番エンジニアに Rosetta を黙って送り込む EXCLUDED_ARCHS=arm64 のハックで済ませない。セルフホストランナー と同居するレンタルホストでは、検出スクリプトを一つのインフラリポに集約し全リージョンで同じ版を回す。JPUS でドリフトすると「東京は緑、バージニアは赤」チケットが増殖します。

ランナー責務:Intel レーンと ARM レーン

移行期は各レーンに明示的な保証を持たせ、「同じ CI」のふりをしないでください。

レーン 担当 担当してはいけないこと
ARM64 プライマリ 既定 PR チェック、シミュレータテスト、TestFlight 向け Archive arm64 ビルドのないレガシー CLI(サンドボックス無し)
Intel ブレーカー 更新待ちのベンダーバイナリ、一回限りのパリティ 長期署名。本番鍵と絡めない
スモークハイブリッド file 等で必要ならファットスライスを検証するスクリプト iOS アプリターゲットへの黙った Rosetta 依存

xcodebuild フラグとビルド設定をポリシー化する

共有 xcconfig か Fastlane の env エクスポートに一度議論して継承させます。

設定 ARM64 CI での推奨 備考
ARCHS arm64 アプリと拡張でスキームが違うとき「standard」より明示が安全。
ONLY_ACTIVE_ARCH Release 系 CI は NO。内側ループの Debug で薄いスライスを許容するなら YES ここがズレると実機とシミュレータでフレークが出る。
EXCLUDED_ARCHS[sdk=iphonesimulator*] Apple Silicon ホストでは多く空 Intel 時代の除外が arm64 シムを誤って潰していないか確認。

フラグはジョブごとに固定した DEVELOPER_DIR とセット。xcode-select マトリクス が無いと、同じプロジェクトを二つの Xcode が別解釈するレトロが地獄になります。

CocoaPods、SwiftPM、ARM64 と戦うバイナリグラフ

CocoaPods は Intel から rsync せず arm64 ホストで Pods/ を再生成し、スクリプトフェーズが正しいアーキでコンパイルされるようにします。SwiftPM は Package.resolved のバイナリターゲットに arm64-apple-ios が載るか確認します。フレームワークが遅れたら一時的にソースビルドやフォーク固定。利息は日々たまります。

Rosetta の罠: uname -marm64 でも file $(which node) が x86_64 なら、OpenClaw や JS リンターが黙って翻訳実行—CPU を焼きクラッシュログを混乱させます。

二系統スケジュール:キュー深さ、メモリ、ディスク

Mac mini は輝きますが、16 GB で重い Archive を三つと UI テストを同時に積むと破綻します。移行中は測定したメモリ圧に合わせホストあたりの同時 xcodebuild を上限化し、「ARM コンパイルのみ」と「ARM Archive」プールをラベルで分けます。ARM64 でも DerivedData は小さくなりません。実験同士がキャッシュを追い出さないよう DerivedData 隔離 とセットで移行してください。

SRE が Jira に貼れる 8 ステップ

  1. カットオーバー週末の 72 時間 前から依存バンプをフリーズ。
  2. 全リージョンホストで棚卸しスクリプトを実行し、差分をインフラリポにコミット。
  3. 拡張を含む全スキームに xcconfig ポリシーを適用。
  4. arm64 のクリーン checkout から Pods と SwiftPM を再ブートストラップ。
  5. 同一シードで二重キューを有効化し壁時計・フレーク率・アーティファクトサイズを比較。
  6. 既定 PR ルーティングを ARM64 に切替え、Intel レーンは読み取り専用に。
  7. 14 日 観測。失敗率が跳ねたらシークレットではなくラベルでロールバック。
  8. Intel を廃止するか、請求タグを外した専門ジョブへ降格。

指標表:レンタル M4 での「成功」の見え方

指標 Intel 基線(例) ARM64 目標
クリーンビルド p50 19.5 分 同一コミットで 12.0 分 以下
シミュレータ UI テスト p95 41 分 宛先正規化後 28〜33 分
週次電力コスト代理(正規化) 1.00 待機ワットとスループット合算で 0.62〜0.78

例示数値は Grafana や Buildkite のヒストグラムに置き換えてください。生データなしの移行デッキは出さない。

FAQ:Rosetta、シミュレータ、署名

質問 実務回答(2026-04-30)
速度のため Rosetta で CI を回すべきか iOS コンパイルではいいえ。ネイティブ arm64 が勝つ。Rosetta は周辺レガシー CLI のみ。
アーキごとに署名アイデンティティを分ける必要は アイデンティティ自体はアーキ非依存。ただしプロビジョニングとエンタイトルメントは実際に出荷するバイナリと一致させ、グラフ変更後は再エクスポート。

署名自動化は キーチェーンとプロビジョニング CI を継続。アーキ移行は潜在するプロファイル不整合を表面化します。

移行に賭けるならベアメタル Mac mini M4

ARM64 CI はクロックだけではなく、ハイパーバイザに嘘をつかない 決定的 ツールチェーンの話です。MacXCode リージョンの 1〜2 TB NVMe 付きレンタル Mac mini M4 は二系統レーンを載せ、複数の DEVELOPER_DIR ツリーを残しつつ、エンジニアが別タイムゾーンで眠っている間の DerivedData スパイクも吸収する余白があります。その余白が、フラグデーを怖いイベントから測定可能で巻き戻せる展開に変わります。第二ノード追加の 料金 が透明なのも助けです。プロンプト監査が必要なら VNC は最小限。日々の移行作業は grep 可能な SSH ログに留めます。

レガシーレーンの横にネイティブ ARM64 ビルダーを立てる

Mac mini M4 · HK / JP / KR / SG / US · SSH / オプション VNC