要約:署名は通るのに壊れる五経路
Appleのパイプラインは.appを単なるファイル集合ではなく、ネストされたコードとメタデータのグラフとして扱います。バイト列は揃っていても、ツールがディレクトリ意味を壊せばcodesign --verify --deep --strictは失敗します。症状はGatekeeperの文言が強く出がちで、パッケージングの衛生問題がマルウェア疑いに見えることがあります。
SHA256は同一性、codesignは署名グラフ——両方が昇格ゲートに必要です。整合性記事のマニフェストと、各ホップのverifyをセットにしてください。帯域とタイムアウトが先に詰まる場合はWAN記事で並列とTCPを整えてから戻るとよいです。
macOS同士の低遅延なら明示フラグ付きrsyncが現実的です。Linuxが中継ならディレクトリを直接置かず、Macでtar.gzに閉じ込めます。upload-artifactのsymlink挙動はメジャーで変わるので固定し、取得後は必ずMacで再検証とRunbookに書きます。
リリースはreleases/<build_id>/へ書き、マニフェスト合格後にポインタを原子的に差し替えます(原子的リリース)。公開ツリーへの--inplaceは部分ツリーを晒します。notarytoolのsubmission idとgit sha、Xcodeビルド番号を同じチケットに残し、監査で読み返せるようにします。
痛み分け:flatten、Linux中継、inplace、stapleずれ、検証の穴
flatten:ZIPやクラウド同期がメタデータを戻さず、見た目は揃っても深い検証で落ちる。
Linux中継:symlinkが実体化したり実行ビットが表現できない。tarは明示しない限り早めに解引用しない。
inplace:ライブツリーへ直接同期すると途中状態を配布する。ステージングとポインタ交代が必要。
stapleずれ:公証後に再圧縮するとチケットとバイトが不一致。immutable扱いにする。
検証の穴:ビルドMacだけでverifyを済ませない。配布側Macでも繰り返す。
判断表:パッケージを決めてから帯域最適化
ビルドID、署名ID、submission id、パッケージツール、転送ツール、各ホップの終了コードを一つのチケットに集約します。
| トポロジ | リスク | 推奨移動 | 関連記事 |
|---|---|---|---|
| Mac→Mac低遅延 | フラグ次第で低い | メタデータ保持rsync | 並列SFTP、原子的 |
| Mac→Linux→Mac | 高い | ビルドごと単一tar.gz | 整合性 |
| 公開dmg | staple後に中 | staple後にファイル名固定 | 原子的 |
| 内部キャッシュ | 管理下 | 未署名中間可、昇格で再署名 | CI資格情報 |
| 巨大成果物WAN | タイムアウト | 先にtarし並列を調整 | WAN記事 |
署名はmacOSファイル意味に依存。クロスプラットフォームでは意味を保つアーカイブを選びます。
How-to:ステージング用スケルトン
ホストと秘密は置き換え。CI資格情報マトリクスに合わせます。
# ビルドMac:Linux中継前にアーカイブ
COPYFILE_DISABLE=1 tar -czvf MyApp_build.tar.gz MyApp.app
codesign --verify --deep --strict --verbose=2 MyApp.app
rsync -av MyApp_build.tar.gz ci@remote-mac:uploads/staging/build-9001/
# リモートMac:展開して到着verify
ssh ci@remote-mac 'cd uploads/staging/build-9001 && tar -xzvf MyApp_build.tar.gz'
ssh ci@remote-mac 'codesign --verify --deep --strict uploads/staging/build-9001/MyApp.app'
# マニフェスト合格後のみ昇格(原子的リリース記事参照)
対話型SFTPは権限トグルをSOP化し、夜間betaを壊さないようスクショ付きで固定します。
チケット項目、公証待ち、ディスク余白
git sha、XcodeとmacOSパッチ、署名ID要約、submission id、stapler状態、ソースと着岸のverify終了コード、転送ツール版、SHA256マニフェストIDを最低限そろえる。公証キューはイベント時に30分超も珍しくない。空き容量が長期120GB未満だとアーカイブや展開で不安定になりやすい。署名ツリーとクリエイティブ資産はアカウント分離を推奨。PR用ワークフローと本番署名ホストを混在させない。
用語、FAQ、ホスト型リモートMac
バンドルは実行ファイルとリソースのディレクトリ規約。Developer IDはストア外配布向け。チケットは公証記録、staplingはオフライン検証向け埋め込み。xattrは非Mac FSで落ちやすい。atomic pointerは検証後にだけ差すシンボリックリンク。
SHA256が一致すれば署名もOK?
いいえ。ハッシュはバイト一致のみ。verifyが通らないなら、記録したバイト自体が壊れたグラフを含んでいる可能性がある。
Linuxで最終判定してよい?
権威にすべきではない。tarの運搬は可、厳密検証はmacOSで。
SFTPはrsyncより悪い?
常にではない。無人運用ではどちらも手順と検証の明文化が鍵。
まとめ:バンドル意味を保ち、Linux前にtar、各ホップverify、マニフェストと原子的昇格をセットで。
限界:多入口自運用はRunbook負荷が重い。SFTPMACのホスト型リモートMacは安定ホストと暗号入口を束ね、symlink破壊の再発見に時間を奪われにくくします。
プランとリージョンを確認し、署名ホストと配布Ingressを揃えましょう。
