問題の概要アプリの準備がようやく整い、ビルドを実行して成功を待っていると、codesignユーティリティがresource fork, Finder information, or similar detritus not allowedという奇妙なエラーで停止することがあります。これは通常、「Sign to Run Locally」フェーズや配布用のアーカイブ作成中に発生します。
Xcode、ターミナルベースの署名、あるいはElectronやFlutterのようなフレームワークを使用しているかに関わらず、このエラーはプロジェクトファイルに隠れたメタデータが含まれている場合に発生します。簡単に言えば、macOSは主要なデータフォーク以外の余分な情報を含む「汚れた」ファイルの署名を拒否します。
根本原因:拡張属性(xattrs)macOS 10.12 Sierra以降、コード署名のプロセスは非常に厳格になりました。これは、ファイルの内容を変更せずに情報を保存するメタデータブロックである**拡張属性(xattrs)**に依存しています。主な原因は以下の通りです:
- com.apple.quarantine: ブラウザ、Slack、Discordなどを通じてダウンロードされたファイルに付与されるフラグ。- com.apple.FinderInfo: カスタムアイコンやカラータグなど、Finder固有のデータを保存する32バイトのブロック。- リソースフォーク(Resource Forks): 古い画像形式やPhotoshopで編集されたファイルによく見られるレガシーなデータ構造。Codesignは、完全に予測可能なファイルハッシュを必要とします。これらの属性はメインのファイルデータを変更せずに修正できるため、macOSはセキュリティリスクと見なします。たとえ1つの
.pngや.plistに隠し属性があるだけで、署名全体が失敗します。
原因となっているファイルの特定ビルドをブロックしているファイルを正確に特定するには、プロジェクトディレクトリで次のコマンドを実行します:
ls -al@ ./path/to/assets
ファイル名の直下にcom.apple...で始まる行を探してください。それが失敗の原因となっている「デトリタス(不要物)」です。
解決策:メタデータの削除解決策は、プロジェクトからこれらの属性を再帰的に一掃することです。これには3つの方法があります。
方法1:再帰的な一掃(即時の修正に最適)これが最も直接的な解決策です。ターミナルを開き、ソースフォルダまたは最終的な.appバンドルに対して、-c(クリア)および-r(再帰的)フラグを指定してxattrツールを使用します。
# プロジェクトのソースまたは .app バンドルに対して実行してください
xattr -cr /path/to/your/project
方法2:Resourcesフォルダを対象にするアセットフォルダはFinderのメタデータが溜まりやすい場所です。外部アプリで頻繁に画像を編集する場合は、他のファイルへの影響を最小限に抑えるために、そこを重点的にクリーンアップしてください。
xattr -cr ./Resources
方法3:Xcodeのビルドフェーズで自動化するビルドプロセスにクリーンアップスクリプトを追加することで、エラーの再発を防ぎます。これは、開発者が異なるメタデータ署名を持つファイルをコミットする可能性があるチーム開発で特に役立ちます。
- Xcodeでプロジェクトを開き、Targetを選択します。- Build Phasesタブに移動します。- **+**をクリックし、New Run Script Phaseを選択します。- このフェーズを「Copy Bundle Resources」の前に実行されるようにドラッグして移動します。- 以下のスクリプトを貼り付けます:```
codesignが正常に完了するように、ビルド成果物から属性をクリーンアップします
find "${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app" -type f -print0 | xargs -0 xattr -c
## 結果の確認クリーンアップ後、バンドルが署名可能な状態になったか確認します:
codesign --verify --verbose /path/to/your.app
チェックが成功すると、何も出力されないか、シンプルな「valid on disk」というメッセージが表示されます。「bundle format is ambiguous」と表示された場合は、誤ってシステムディレクトリを削除していないか再確認してください。`xattr -c`はメタデータにのみ影響するため、コード自体はそのまま維持されます。
## メタデータの蓄積を防ぐ方法- **画像をクリーンにする:** `optipng`などのCLIツールや、Photoshopの「Web用に保存」を使用してください。これにより、リポジトリに入る前に不要な32バイトのメタデータブロックが削除されます。- **Gitの管理:** `.DS_Store`ファイルが`.gitignore`に含まれていることを確認してください。これらはFinderデトリタスの主な原因です。- **ターミナルでのダウンロード:** `curl`や`wget`を使用してアセットを取得すると、ブラウザでダウンロードした場合とは異なり、通常`com.apple.quarantine`フラグは付与されません。

