SSH/VNC判断表 · 8段ランブック · 四原則 · 20分検収
自前のMacを持たず、時間課金のクラウドMacでiOSを出荷するチームは、Appleからの「証明書期限間近」メールを受け取った瞬間に詰まりやすいです。Developer Portalで更新しても、レンタルノードのキーチェーンに秘密鍵が無い、SSHのmatchが無言で止まる、VNCを開くと2FAと「常に許可」が待っている——原因はネットワークではなくGUI債務のことが多いです。本稿は証明書とプロビジョニングプロファイルのローテーション境界を整理し、SSHのみ/一度VNC/VNC主導の判断表、Portal→Match→Validateの8段手順、チケット用四原則、20分の同一ユーザー検収表を示します。Fastlane Match判断表、Organizer/Transporter、NTPと証明書、初回TestFlightと併読してください。
iOS署名は三層で動きます:Apple Developerの証明書、それを埋め込んだプロビジョニングプロファイル、ビルドマシン上の秘密鍵+キーチェーンACL。PortalでDistribution証明書を作り直しても、レンタルMacに古いプロファイルが残ればcodesignは「有効期限切れ」と「プロファイル不一致」を同時に報告します。時間課金ノードでは、Archiveを何度も回すほど無課金に近い待ち時間が増えます。
期限の種類を混同:証明書のNot AfterとプロファイルのExpiration、ASCの処理遅延は別物。メール件名だけで判断しない。
ユーザ分裂:SSHはci、VNCは個人アカウント——Organizerだけ新証明書を見る典型。
Capabilityドリフト:PushやApp GroupsをPortalで足したのにプロファイル未再生成。
Match未同期:Portal変更が暗号化Gitに戻らず、翌ノードで「昨日は緑」が再現不能。
時計ずれ:「まだ有効ではない」はNTP未同期のTLS失敗と同型。時計ランブックを先に切る。
レンタルMacは捨てられるキャッシュと割り切り、Matchやエクスポートした.p12を真実源に据えると、ノード入れ替え時のパニックが減ります。
症状が右列なら、推奨列へ切り替えてから再試行してください。同一macOSユーザーでSSHとVNCを揃えるのが前提です。
| 作業 | 推奨 | 典型シグナル | よくある誤解 |
|---|---|---|---|
| match readonly同期 | SSH | ログは進むがcodesign失敗 | 証明書ではなくPods |
| 新Distributionの初回インポート | VNC | User interaction is not allowed | DerivedData削除ループ |
| 自動署名の切替 | VNC(Signing画面) | プロファイル名がPortalと不一致 | Gitだけ直す |
| CSR作成・Portal 2FA | ブラウザ+VNC確認 | SSHセッションにUIなし | 別MacでPortalだけ |
| Organizer Validate | VNC | 赤いProvisioning行 | ipa再アップロードのみ |
| security find-identity監査 | SSH | 重複Identity | キーチェーン全削除 |
| match nuke再構築 | VNC立会+SSH実行 | 並行オペレータ衝突 | チャット合意なし |
初回失敗がキーチェーン・2FA・Signingタブに触れたら、SSHで三回目を回さずVNCへ——多くの場合、追加1時間の課金より安いです。
凍結:Team ID・対象Bundle ID・使用中証明書シリアル(下8桁)をチケットに記録。OS/Xcodeの無計画更新は止める。
Portal:新Distribution(またはDevelopment)を発行。旧証明書は24–72hの重複許容を検討してから失効。
プロファイル再生成:Capabilities差分を反映。UUIDをメモ。
VNCインポート:同一ユーザーでXcode Accounts・キーチェーン「常に許可」。Matchならbundle exec fastlane match appstore --readonly前に実施。
SSH検証:security find-identity -v -p codesigning と codesign -dvvv でチェーン確認。
スモークArchive:Release相当のSchemeで最小Archive。失敗ログは認証/署名/コンプライアンスに分類。
Organizer Validate:配信前の赤行を潰す。アップロード判断表へ接続。
証跡:Match commit・スクリーンショット・UTC時刻をチケットへ。ノード返却前にpush完了。
# 同一ユーザーで実行(readonly例) bundle exec fastlane match appstore --readonly security find-identity -v -p codesigning | head -n 15
.p12をコピーしただけではCIは緑にならない。| 項目 | 操作 | 合格 |
|---|---|---|
| ユーザー一致 | メニューバーとwhoami | 完全一致 |
| Accounts | チーム選択・黄警告なし | 期待Team ID |
| Identity | 期限切れDistributionなし | 単一の有効チェーン |
| Profile | Signingのプロファイル名 | Portal UUIDと一致 |
| Validate | Organizer | ブロッカーなし |
| ディスク | df -h | システム15%以上空き |
初めてのプロバイダなら初回30分を先に一度通し、その後は本稿の短いグリッドを毎ローテで使い回してください。
readonly同期や検証は可能ですが、初回インポート・2FA・キーチェーン許可はVNCが安全です。
他ホストのCIが参照中なら短い重複期間を設け、Matchとパイプラインを順に切り替えます。
署名更新とASC処理・SDK要件は別フェーズ。外測チェックリストでビルド番号を追跡。
返却前にMatch pushとスナップショットを完了。新ノードでreadonly→本稿の20分検収を繰り返します。
証明書更新は「Portalでボタンを押す作業」ではなく、三層を同じユーザー・同じ時計・同じGit真実源で揃える運用です。SSHだけの習慣は、期限切れ直前に表面化するGUI債務を隠し、レンタル課金を膨らませます。自前Macは固定費と睡眠・更新の不確実性を抱えます。
VNCをローテの標準I/Fに据えれば、Macを持たないチームでもApple公式クライアントと同じ検証粒度を維持できます。VNCMacの時間課金リモートMacで、本稿の検収表をそのまま再現してください。