electron-builderで作ったmacのアプリが起動時に「"<アプリ名>.app" will damage your computer. You should move it to the Trash.」となる場合の解決法
以前から公開しているMarkuPrevというアプリをローカルでビルドした後,アプリを起動しようとすると以下のようなメッセージで2つのダイアログが表示され,起動ができなくなりました. (スクリーンショットを撮り忘れました.)
The application “MarkuPrev.app” can’t be opened.
“MarkuPrev.app” will damage your computer. You should move it to the Trash.
TL;DR
Appleの開発者ライセンスの証明書がRevokeしていたので,新しい証明書をキーチェーンに入れたら直りました.
環境
以下のプラグインを使って,vue-cli-service経由でelectron-builderを使っています.
- @vue/cli-service: 5.0.8
- electron-builder: 24.13.3
- vue-cli-plugin-electron-builder: 2.1.1
現象
yarn electron:build:mac
(= vue-cli-service electron:build --mac
)でmac用のアプリをビルドし,正常に終了したのでMarkuPrev.app
ファイルを開いたところ,
冒頭の2つのエラーダイアログが表示され,アプリが起動できませんでした.
今回,アプリケーションのソースコードは変更していますが,ビルドに関連するコードの変更やライブラリのアップデート等は行っていません.
また,ビルド時のコンソール出力を見ても,エラー等は出ていませんでした.
問題の特定
Console.appを使い,エラーダイアログが表示されたときのログを確認したところ,以下のようなログが出力されていました.
mac_vnode_check_signature: /Users/otti/src/github.com/ottijp/markuprev/dist_electron/mac-arm64/MarkuPrev.app/Contents/MacOS/MarkuPrev: code signature validation failed fatally: When validating /Users/otti/src/github.com/ottijp/markuprev/dist_electron/mac-arm64/MarkuPrev.app/Contents/MacOS/MarkuPrev:
The code contains a Team ID, but validating its signature failed.
Please check your system log.
このログから,コード署名がうまくいっていないことを確信しました.
electron-builderでコード署名するときの証明書の場所
electron-builderのドキュメントを読むとちゃんと書いてありました.
On a macOS development machine, a valid and appropriate identity from your keychain will be automatically used.
cf. Code Signing - electron-builder
そこでキーチェーンを見ると,確かにRevoked
と表示された証明書が存在しました.
(スクリーンショットを撮り忘れました.)
最新の証明書のインポート
Apple Developerのアカウントページにログインし,証明書のページから TypeがDevelopmentの証明書をクリックしてDownloadボタンで証明書をダウンロードします.
ダウンロードした.cerファイルをダブルクリックすると,キーチェーンにインポートされます.
画像はRevoked
証明書の削除後に撮ったもので,Revoked
証明書もここに存在していました.
ビルドの再実行と起動
新しい証明書をキーチェーンに入れたあとでリビルドすると,無事アプリが起動できるようになりました.
ちなみに,現象が起きていた時に,仮にelectron-builderを25.0.5にアップデートしてみたところ,ビルド時にコード署名できない旨のエラーが出ることを確認しました. アップデートしていればもっと早く気付けたかもしれません.