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 許可が SG と US で異なることがある。
- 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 と対話シェルではキーチェーンが別になる。リージョン期待値
| 観点 | 計測 | 対策 |
|---|---|---|
| RTT | TTFB | ミラー/プルスルー |
| GitHub | 429/5xx | バックオフ |
| ディスク | fs_usage | 別ボリューム |
FAQ
| 質問 | 回答 |
|---|---|
| キャッシュ無効化? | 破損調査時のみ。通常は分離。 |
| Xcode Cloud は? | キューと寿命が異なる。比較記事 を参照。 |
| 決定性の証明 | Package.resolved のチェックサムを CI で検証。 |
Mac mini M4 が向く理由
高速 NVMe とユニファイドメモリが resolve とコンパイルの両方に効く。料金 でリージョンを先に決め、ヘルプ で手順を共有。