2026年多地域Mac Meshにおける
iOS署名とプロビジョニング

配布ノード・専用サイナー・プロファイルローテーション・キーチェーン境界・意思決定マトリクス

2026年Mac MeshにおけるiOS署名とプロビジョニングのガバナンス

モバイルおよびプラットフォーム責任者が複数ノードのリモートMacメッシュを運用していると、「ここではArchiveの署名は通るのに、向こうのCIではプロビジョニングが落ちる」といった事象に直面しがちです。ローテーション期間のずれ、配布用証明書が共有ディスクに置かれる、あるいは各ランナーが独自の.p12とチーム文脈を取り込む、といったパターンです。本稿では専用サイナー、ランナーごとの身元、制御された配布を比較し、ローテーションとべき等性のルールに沿ったプロファイルとバンドルの対応を整理し、六段階のランブックを示したうえで、規模・コンプライアンス・リリース頻度のマトリクスで締めくくります。ゴールデンイメージのドリフトチェックリスト共有ビルドプールのランナーOIDCによる短命クレデンシャルの保管へのクロスリンクにより、署名コンテキストをツールチェーンのバッチと揃えます。

01

ゴールデンイメージは固定済みなのに、なぜノード間で署名が食い違うのか:五つの痛みの型

ゴールデンイメージのチェックリストに従っているのに、メッシュ全体でerrSecInternalComponentやプロビジョニングの不一致が出ることがあります。根本原因は多くの場合、署名コンテキストがパイプラインの一次メタデータになっていないことです。プロファイルのUUID、チームID、証明書フィンガープリント、キーチェーンの範囲は、IMAGE_IDと同様に監査可能である必要があります。共有ビルドプールでは、ランナーが任意の.p12束を取り込むと、コンプライアンスとトリアージの両方が同時に崩れます。

  1. 01

    ローテーション期間:Apple Developer側でプロファイルが更新されたあと、古いUUIDが一部ノードに残り、失敗がランダムに見えます。「最新を取得」ではなく、明示的なマニフェストの版を固定します。

  2. 02

    配布証明書の散乱:一つの.p12を多くのメッシュホストにコピーすると、一度の失効で全体が止まり、監査では秘密鍵をどこに誰が取り込んだか答えられません。

  3. 03

    キーチェーン範囲のずれ:ログインとシステムのキーチェーンの組み合わせと、CIユーザー向けのアンロック方針のばらつきにより、ヘッドレス署名が断続的に身元を見失います。

  4. 04

    複数App IDの対応ミス:拡張機能はホストアプリとは別のプロビジョニングが必要ですが、PROVISIONING_PROFILE_SPECIFIERxcodebuild引数で一度だけハードコードされている、という形です。

  5. 05

    プロファイルとビルドキャッシュの混在:プロファイルをDerivedDataの隣の「消してよい」ツリーに置くと、クリーナが一晩で削除します。

この五つをオンコールの順序づけに「コンパイラより前の署名レイヤー」として載せると、無駄な再試行を減らせます。ハンドオフの人間待ち時間が待ち行列を膨らませるため、SSHとVNCのチェックリストと組み合わせ、サイナーホストでキーチェーンのプロンプトを誰が押してよいか決めてください。

02

専用サイナー、ランナーごとの証明書、制御された配布:失効の波及範囲と監査コスト

どのトポロジーも万能ではありません。失効の爆発半径、コンプライアンス上の証跡、メッシュの伸縮性に合わせます。専用サイナーは失効面を最小化しますが待ち行列が生じます。ランナーごとの鍵は並列度は伸びますが監査コストが爆発します。制御された配布はその中間で、マニフェストと読み取り専用マウントが必要です。OIDCによる秘密の保管と同じ教訓で、秘密鍵素材は寿命を最短に、露出を最小にします。

観点専用サイナーランナーごとの身元制御された配布
失効の波及範囲最小。ローテーションは境界内に収まる最大。ホスト単位の追跡が必要中程度。マニフェストの版で管理
待ち行列とメッシュの伸縮ボトルネック化のリスク。予約やサイドカー書き出し高い並行性中から高。プロファイル取得を並列化
コンプライアンス監査最も容易。アクセスと書き出しを記録最も難しい。鍵が分散中程度。マウントが不変であることを証明
ゴールデンイメージとの結合サイナーは独自のバッチを追跡できる証明書がイメージIDからずれるプロファイル更新はイメージメタデータの隣に置く
アンチパターンサイナーを汎用コンパイルホストにする成果物ストアに.p12をコミットする「常に最新プロファイルを取得」ジョブ

ガバナンスが健全なのは、一度の失効から数分で影響ノードとパイプラインに写像できるときであり、「だいたいビルドは通る」ときではありません。

ArchiveとPRビルドが同じメッシュを共有する場合は、コンパイルの待ち行列とは別に署名の課金とリースを切り分けますプール座席のロックでは、キーチェーンの承認待ちのあいだコンパイル用ロックを握り続けないでください。

03

六段階のランブック:プロファイルマニフェストからノード横断の検証可能な署名まで

ゴールデンイメージの六段階と並行して実行します。イメージはツールチェーンを担当し、本稿は署名成果物とキーチェーン境界を担当します。各段階にチケットIDが必要です。プールのリースでは、サイナー座席の取得をコンパイルの待ち行列から切り離します。

  1. 01

    プロファイルマニフェストを固定する:profiles.json(UUID、ファイル名、有効期限、チームID)をGitまたは保護されたバケットに置き、CIのゲートはノードのマウントと一致させます。

  2. 02

    READMEにトポロジーを宣言する:専用か分散かランナーごとか、秘密鍵を置いてよいホスト名を書きます。

  3. 03

    キーチェーンとアンロック方針:CI用のキーチェーン区画を切り、security unlock-keychainの許可ウィンドウと失敗時のフォールバックを文書化します。

  4. 04

    すべての.p12書き出しをゲートする:二重統制とチケット番号。「とりあえずデスクトップへ一時書き出し」は禁止です。

  5. 05

    プローブを拡張する:ツールチェーンのフィンガープリントに加え、security find-identity -v -p codesigningをハッシュしてログ索引に載せます。

  6. 06

    ステージングでローテーションする:本番プロファイルの有効期限の七日前から並行UUIDと順序付きロールバックでリハーサルします。

bash
export PROFILE_MANIFEST_SHA="$(shasum profiles.json | awk '{print $1}')"
export SIGNING_SUMMARY="$(security find-identity -v -p codesigning | shasum | awk '{print $1}')"
node scripts/assert-signing-context.mjs \
  --expect-manifest "${PROFILE_MANIFEST_SHA}" \
  --expect-signing "${SIGNING_SUMMARY}" \
  --region "${RUNNER_REGION}"
i

注:プローブの出力はログ索引にのみ載せ、秘密鍵のフィンガープリントを公開の成果物メタデータに載せないでください。外部SBOMでは下六桁のシリアルや内部エイリアスに留めます。

04

アプリと拡張のターゲットを跨ぐプロファイルローテーション:べき等性キーとトリアージ順

典型的な偽陽性は、ホストアプリのプロファイルは更新されたが拡張がまだ古いUUIDを参照しているというものです。トリアージ順は、embedded.mobileprovisionをビルド引数と比較し、次にキーチェーンの身元サマリを比較し、最後にXcodeのプロジェクト設定を比較します。観測可能なタスクチェーンの記事と連鎖させる場合は、ハンドオフの封筒にprofile_manifest_shaを含めます。

  1. P1

    証跡の三つ組:codesign -dvvvのチーム、Authority、Sealed Resourcesです。

  2. P2

    マニフェストの差分:失敗ノードと成功ノードは同じprofiles.jsonのハッシュを共有していますか。

  3. P3

    アンロックウィンドウ:最初の無人署名が許可されたアンロック間隔の外に出ていませんか。

  4. P4

    ターゲットごとの対応:各ターゲットのCODE_SIGN_STYLEは対応するspecifierと組になります。

  5. P5

    書き出しパイプライン:Archiveとアドホックで誤ったプロファイルディレクトリを再利用してはいけません。

  6. P6

    べき等性の送出:キュー完了時にマニフェストの版を運び、下流の二重署名を防ぎます。

!

警告:並行期間中に自動署名と明示的なプロファイルファイルパスを混在させないでください。メッシュ上でターゲットごとに断続的な失敗として表れます。

05

READMEにそのまま貼れる数値と意思決定マトリクス

複地域のiOS実務からの三つの計画帯です。自社のテレメトリに差し替え、監査用に出典を残してください。

  • 並行プロファイル期間:本番プロファイルの失効の七から十四日前にUUIDを重ね始めます。七日未満は休日フリーズと衝突しがちです。
  • 身元サマリのずれ:プール内で二十四時間以内に二種類を超える別々のコード署名身元ハッシュが出たら、マニフェストが揃うまで新規ノードを止めます。
  • 秘密鍵のコピー:配布用秘密鍵の稼働コピーは二つ以下(本番とコールド予備)に抑えます。それ以上は手順欠陥の信号です。
チーム規模コンプライアンスリリース頻度最初の安定選択
標準週一回以上専用サイナーと明示マニフェスト。共有.p12は禁止
標準日次以上制御された配布と読み取り専用マウントと自動ローテーション
プラットフォーム継続的HSM級サイドカーと完全な監査索引
複数ベンダー不定期隔離ランナープールとプロジェクトごとのプレフィックス

ノートPCをサイナー代わりにすると、スリープ、OS更新、監査されないキーチェーンプロンプトを引きずります。オンプレのMac群は調達と複数サイト同期が重くなります。契約に裏打ちされたリモートMacノードの方が、メッシュの「署名ゲート」の役に適合しやすいです。

!

アンチパターン:codesignがときどき成功したことをプロファイルが正しい証拠にしないでください。プローブにマニフェストのハッシュを強制します。

メッシュと監査可能な署名が、非公式の方針だけで長く保たれることは稀で、借りたノートPCでは秘密鍵が管理区域に留まったことを証明できません。再現可能な署名と安定したゲートのためには、VpsMeshのMac Miniクラウドレンタルの方が多くの場合適しています。リージョンとSKUを選び、ノードを専有し、サイナー契約とコンパイル用ランナーを分離すると、メッシュ方針が個人の習慣ではなく契約上執行可能な条件になります。

FAQ

よくある質問

パイプラインのゲートでプロファイルの版と有効期限を固定し、並行UUIDの期間中は明示的なファイル名を使い、べき等性フィールドを共有ビルドプールのランナーの記事と揃えます。隔離したサイナーノードについてはご注文ページを参照してください。

まずゴールデンイメージとドリフトでツールチェーンのバッチを固定し、証明書とプロファイル対応表のためにここへ戻ります。料金三年TCOの記事と比較してください。

接続の話題はヘルプセンターにあります。リレーの基準値はSSHとVNCのチェックリストにあります。プロファイルが不安定な場合はセクション3のプローブとマニフェストのハッシュを再確認してください。