クラウド Mac の公証を誤判定させる五つのサイン
Developer ID の公証と stapler をオフィスのノートから借りたベアメタルのクラウド Mac に移すと、失敗の形はコンパイラフラグ不足よりも notarytool の待ち行列、SSH と launchd で異なる HTTPS_PROXY の継承、ログインキーチェーンへ配布用証明書を誤って入れたあとの検索順のドリフト、DerivedData と同じ APFS 上で競合する ZIP 一時領域として現れます。
第一の兆候は notarytool がタイムアウトするのに curl は健全に見えることです。子プロセスがデバッグ用シェルと別の PATH やプロキシを継承しているか、GUI と非対話で TLS インスペクションが違うかを疑い、submit と同じユーザーセッションで env と scutil --proxy を揃えてから最小 ZIP を再送し、いきなりリージョン変更は避けます。
第二の兆候は昨日まで通っていたバンドル ID が突然 Invalid になることです。entitlements のズレ、exportOptions の不一致、自動署名がプロファイルを静かに切り替えた可能性が高く、Xcode の再インストールより先に _CodeSignature と exportOptions を差分します。
第三の兆候はビルドホストで stapler validate が成功するのに顧客だけが破損表示を見ることです。中間成果物へ staple したか、後段で zip を再圧縮したかを疑い、エッジでダウンロードしたバイト列のハッシュをチケットの成果物と突き合わせます。
第四の兆候は複数名が時間共有するとだけ不安定になることです。キーチェーンの検索順やログインキーチェーン共有が典型なので、配布用アイデンティティは専用ファイルキーチェーンへ移し、どの Apple チームが真実の源泉かを文書化します。
第五の兆候は df に余白があるのにアップロードが落ちることです。ZIP ステージング、Git オブジェクト、インデックスのバースト IO が原因になりやすいので、公証用 TMPDIR を分離し iostat を見ます。
シンガポール、東京、ソウル、香港、米国東部、米国西部では RTT よりも時刻同期、プロキシ方針、一時ディレクトリの IO が公証成功率を左右します。
curl は正常だが timeout:プロキシと PATH を最優先で確認します。
昨日は通ったのに Invalid:entitlements と exportOptions を差分します。
validate は成功だが顧客は破損:配布バイト列と staple 対象を一致させます。
時間共有でだけ不安定:ファイルキーチェーンとユーザーを分離します。
df に余白があるのに失敗:TMPDIR を分離し IO を測定します。
専用の公証ホストを置くと、対話的な Xcode インデックスとアップロードが同時に走る夜間ピークを分離でき、インシデントの説明責任が明確になります。
Runbook には成果物を残します。チケット欄、UTC タイムスタンプ付き tarball、notarytool log の JSON、成果物ハッシュをセットで保管します。
mono-repo を同じマシンで浅くクローンする運用は、ZIP ステージングを飢餓状態にしないよう別記事の水位表と合わせて週次レビューします。
stapler は最終的にユーザーが受け取るバイト列に対して実行し、CDN 後段で再圧縮しない契約をパイプライン側で固定します。
メンテナンスウィンドウでは重いシミュレータスナップショットと notarytool を重ねず、CPU とディスクの競合を避けます。
専用ホストと混在ワークステーションの比較
監査のため、どのインスタンスがどの Team ID とキーチェーンパスに紐づくかをインベントリ化し、変更時は差分を添付します。
クラウド上のログに個人を特定しうるトークンが含まれる場合は、アクセス権と保存期間を社内ポリシーに沿わせ、閲覧者を公証用アカウントに限定します。
日単位のレンタルで小さな zip を通し、月契約へ移す前にアップロード成功率を数値化します。
| 観点 | 公証専用 | Xcode と混在 | 無人 CI |
|---|---|---|---|
| 証明書リスク | ファイルキーチェーンで低い | 自動署名混在で高い | 中、ローテ必須 |
| 人的干渉 | 低い | 高い | 低い |
| IO | temp 分離可 | DerivedData と競合 | 浅い clone と temp 分離 |
| リージョン | 署名者 TZ | 開発 TZ | レジストリと Git |
| 租期 | 日租で検証後に月 | 週で監視 | 四半期と掃除 |
安定性は ping よりも submit・staple・validate が同一監査可能セッションにあるかどうかです。
16GB と 24GB の境界では、インデックス、公証 zip、シミュレータを同時に走らせない運用ルールを先に決めます。
時刻が信頼できるソースから約 2 分以上ずれて拒否が散発する場合は、CPU 増強より NTP とタイムゾーン設定を優先します。
一時領域には df の見出し以外に、公証専用で約 30GB の書き込み余白を確保し、15GB を下回ったら大きな Archive を止めます。
専用ホストと対話開発ホストを分けると、キーチェーンの物語とアップロード安定性の衝突を減らし、六地域での短期レンタル検証から月次ロックへ移行しやすくなります。
オフィスの単一 MacBook だけに依存すると、スリープや上行の揺らぎが公証の尾部で表面化しがちです。
notarytool と stapler の骨格
MESHLAUNCH の Mac mini ベアメタルレンタルは、安定した出口と実機上で公証マトリクスを検証するうえで現実的な選択肢になります。
xcrun notarytool store-credentials "AC_PROFILE" --keychain "$HOME/Library/Keychains/ci-notary.keychain-db" --apple-id "..." --team-id "..." --password "app-specific" xcrun notarytool submit ./Dist/MyApp.zip --keychain-profile "AC_PROFILE" --wait xcrun notarytool log SUBMISSION_ID --keychain-profile "AC_PROFILE" xcrun stapler staple ./Dist/MyApp.zip xcrun stapler validate ./Dist/MyApp.zip
ヒント:notarytool log の JSON を成果物ハッシュと同梱します。
日租から月契約までの六ステップ Runbook
各ステップはチケット欄やログ tarball などの成果物を必ず残し、口頭の暗黙知にしないことが重要です。
メンテナンスウィンドウと重いビルドを分離し、失敗時のロールバック手順を同じページに固定します。
ロール固定:ユーザー、キーチェーン、チーム ID を記録します。
exportOptions 保全:UTC 付き tarball にします。
日租バーンイン:小さな zip で通し切ります。
temp 分離:DerivedData と共有しません。
時刻とプロキシ:NTP と TLS ストアの担当を決めます。
月次ロック:週次の掃除とログローテをカレンダー化します。
週次レビューではアップロード成功率とディスク水位を同じダッシュボードに載せ、閾値を超えたらサイジング変更を起票します。
六地域をまたぐ場合は、どのインスタンスがどの Apple チームの一次情報源かを表形式で公開します。
失敗サンプルは submission id ごとにフォルダ分けし、再現手順を最小コマンドに落とします。
時計・メモリ・一時領域の閾値
以下の数値は運用コミュニケーション用の目安であり、ハードウェア保証ではありません。
実測ヒストグラムで調整しつつ、ポストモーテムで検証可能な形に残してください。
時刻ずれ:信頼できる基準から約 2 分以上ずれた拒否は NTP を先に直します。
16GB 混在:インデックスと zip とシミュレータ同時はサイジング事故とみなします。
temp 水位:公証 temp に約 30GB の余白、15GB 未満なら大物 Archive を止めます。
注意:閾値はガイドラインでありクラウド SLA ではありません。
単一ノートへの依存をやめ、公証ホストと対話ホストを分離すると、キーチェーンの物語とアップロード安定性の衝突を減らせます。
短期レンタルで六地域の出口を検証してから月契約に移すと、キャッシュフローとリスクのバランスが取りやすくなります。
MESHLAUNCH の Mac mini クラウドレンタルは、実機と安定した出口の上で公証マトリクスを検証する現実的な選択肢です。
専用ユーザーとファイルキーチェーンを推奨します。詳細は 共有インスタンス分離 Runbook、申込みは 価格ページ をご覧ください。
mono-repo ディスク Runbook の浅いクローンと sparse を組み合わせ、ヘルプセンター で契約を確認してください。
署名担当のタイムゾーンと安定した出口を優先し、その後で Git と成果物を揃えます。セッション品質は SSH と Mosh の表 を参照してください。
