CircleCI×fastlaneで証明書を更新したらExit status: 65エラーでこける。


経緯

今の現場では、developブランチにコミットされたタイミングでcircleCIが動き、Fastlaneが動き、deployGateにアップされるという仕組みになっているのですが、
証明書を更新したらなぜかfastlaneがExit status: 65で落ちてしまいました。

CircleCIにssh接続してログを見たところどうやら codesignでerrsecinternalcomponentエラーで落ちているようでした。

やったこと

circleCIに登録するp12ファイルに権限追加

キーチェーンアプリで対象の秘密鍵をダブルクリック→アクセス制御→常に許可するリストに /usr/bin/codesign と xcode を追加する。

参照:https://qiita.com/sekitaka_1214/items/61d68d603ee1c1b7adf1

キーチェーンをunlockする

CircleCIにssh接続して↓のコマンドを叩く。
security unlock-keychain login.keychain

参照:https://stackoverflow.com/questions/24023639/xcode-command-usr-bin-codesign-failed-with-exit-code-1-errsecinternalcomponen

この2つでは解決しませんでした。。

解決

いろいろ考えた結果、どうやら新しい証明書は今までの証明書と中間証明書(Apple Worldwide Developer Relations Certification)が変わっており、CircleCIが新しい中間証明書を読み込めなかったのが問題でした。

対応内容

1.中間証明書(.cer)をダウンロードします。
2.中間証明書をbase64エンコードし、CircleCIに環境変数として設定します。
base64 -i (中間証明書)| pbcopy
(今回は、APPLE_RELATION_CERTとして設定しました。)
3.CircleCI上で中間証明書をデコードします。

.circleci/config.yml
- run: 
   name: Decode releation certificates
   command: base64 -D -o AppleWWDRCAG3.cer \<<< $APPLE_RELATION_CERT

4.Fastlaneで中間証明書をキーチェーンに登録します。

fastlane/Fastlane
import_certificate(
  keychain_name: ENV["MATCH_KEYCHAIN_NAME"],
  keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"],
  certificate_path: 'AppleWWDRCAG3.cer',
  certificate_password: ''
)

これでうまく行きました!

まとめ

このバグに丸1日はまりました。。
CircleCIかfastlaneが新しい中間証明書を読み込む方法を知ってる方がいたらぜひ教えていただきたいです(>_<)

この対応すごくがんばったのでよかったらLGTMお願いしますᕦ(ò_óˇ)ᕤ