DevOps / CI·CD 2026年4月11日

レンタル クラウド Mac 上の Xcode SwiftPM レジストリ・resolve・CI キャッシュ(2026)

MacXCode エンジニアリングチーム · 約16分

シンガポール・日本・韓国・香港・米東Apple Silicon ビルドホストでは、失敗の多くはコンパイラではなく依存取得です。レジストリ認証、古い Package.resolved、共有 SPM ディレクトリの競合を、本番インフラとして設計します。SwiftPM と CocoaPods並列 xcodebuildセルフホスト Runner と併読してください。

リージョンが resolve に効く理由

  • エグレス経路と IP 許可が SGUS で異なることがある。
  • Git LFS/バイナリ成果物は RTT に弱い——ウォームキャッシュが CPU より効く。
  • コンプライアンスで APAC 内 resolve が必要なら、正規ノードを文書化。
  • マルチテナントでは ~/Library/Caches/org.swift.swiftpm の無制限共有を避ける。
原則:リリースブランチは Package.resolved をコミットし、CI の main は読み取り専用 resolve

GUI なしの認証

CI シークレット → ~/.netrc またはサポートされる環境変数。権限 600、ジョブ後に削除。共有 Mac ではユーザーや RUNNER_NAME で名前空間分離。

ロックファイル方針

ブランチ方針CI
main / リリースロック必須グラフ変更なら失敗
フィーチャーボット更新可PR で Package.resolved
ライブラリロックなしもCI で一時ロック生成

パスと NVMe

パス役割メモ
SourcePackagesソースジョブごとに分離
DerivedData索引並列上限 と連動
グローバル SPMダウンロード読み取り専用ウォーム+書き込み分離

SSH CI ステップ

swift package resolve

調査時のみ -vリモート Archive と同じユーザー文脈で署名と resolve を揃える。

ヒント:launchd と対話シェルではキーチェーンが別になる。

リージョン期待値

観点計測対策
RTTTTFBミラー/プルスルー
GitHub429/5xxバックオフ
ディスクfs_usage別ボリューム

FAQ

質問回答
キャッシュ無効化?破損調査時のみ。通常は分離。
Xcode Cloud は?キューと寿命が異なる。比較記事 を参照。
決定性の証明Package.resolved のチェックサムを CI で検証。

Mac mini M4 が向く理由

高速 NVMe とユニファイドメモリが resolve とコンパイルの両方に効く。料金 でリージョンを先に決め、ヘルプ で手順を共有。

専用 Apple Silicon CI

HK · JP · KR · SG · US