事象|エラー内容
以下のようなエラーが出て実機ビルドができない場合の対処法についてです。
結論として対症療法までしかわかっていないので、根本解決方法をご存知の方がいらっしゃったらコメントいただけると嬉しいです。
Command CodeSign failed with a nonzero exit code
※このエラーはコード署名に関するもので、さまざまな原因で表示されます。
さらにビルドログを確認すると、Warning: unable to build chain to self-signed root for signer "XXX"
と記載されており、コード署名がトラストチェーンを構築できていないことがわかります。
トラストチェーンとは何か
トラストチェーンとは、コード署名を階層構造にして信頼性を担保する仕組みです。
トラストチェーンが構築できない場合、例えば中間者攻撃を受けてコード署名自体が攻撃者のものにすり替えられる可能性があります。
実機デバッグ時のトラストチェーンは以下のようになります。
ルート認証局:Apple Root CA
↓
中間認証局:Apple World Developer Relations Certification Authority
↓
開発者:iPhone Developer: XXX XXX
↓
アプリケーション
キーチェーンアクセスを確認する
キーチェーンアクセスを確認すると、開発者証明書が信頼されていないことがわかります。
※証明書を右クリックして「”XXX”を評価...」 > コード署名にチェック > 続ける をクリックして確認すると、ルート証明書が見つかりませんという状態も確認できます。
ルート証明書、中間証明書を確認する
ルート証明書、中間証明書をキーチェーンアクセスで確認しても問題ないことがわかります。
※私の環境では有効期限が2030年のものと2023年のものが2つありました。
※以下の公式ドキュメントにあるように、2030年のものと2023年のものが共存するのは問題ないようです。
- https://developer.apple.com/support/expiration/
- https://developer.apple.com/support/wwdr-intermediate-certificate/
もしもこの時点でルート証明書、中間証明書が含まれていない場合はAppleのサイトからダウンロードすることができます。
原因
何らかの原因で開発者証明書が信頼されなくなっていることが直接原因ですが、なぜそうなったのか根本原因はわかっていません。
対処方法
-
デフォルトキーチェーンの「ログイン」、システムキーチェーンの「システム」の両方に以下の中間証明書が入っていることを確認する
- Apple Worldwide Developer Relations Certification Authority(有効期限が2023年のもの)
- Apple Worldwide Developer Relations Certification Authority(有効期限が2030年のもの)
- もしも必要な中間証明書が入っていない場合はAppleのサイトからダウンロードして入れる https://www.apple.com/certificateauthority/
- 証明書が信頼されていない場合は以下の手順で変更
- 開発者証明書を右クリックして情報を見るをクリック
- 信頼をクリック
- この証明書を使用するとき の項目を**「常に信頼」**に変更
- この証明書を使用するとき の項目を**「システムデフォルトを使用」**に戻す