Help us understand the problem. What is going on with this article?

macOS向けにElectronアプリケーションの署名(code signing)・公証(notarization)をする

More than 1 year has passed since last update.

ElectronアプリケーションのmacOS版を配布するためには、次の2つの方法があります。

1) Mac App Store
2) インターネット上で直接配布(例えば、GitHub releaseにファイルをアップロードする)

2)の方法で配布する場合、署名(code signing)および公証(notarization)が必要になります。この記事では、実際にElectronアプリケーションをリリースした経験をもとに、必要な設定について解説します。

前提

私が開発したElectronアプリケーション(Photo Location Map)では、次の状態・条件から、リリースに向けて署名・公証に必要な設定をしました。

  • electron-builderを使ってdmgを生成する
  • dmgを直接インターネット上で配布する。(Mac App Storeではない。)
    • GitHub Releasesにpublishする設定にしています。

署名・公証なしの場合

署名・公証なしの場合、インターネット上からダウンロードしたアプリケーションを起動しようとすると、次のメッセージが出て、起動できません。

image.png

また、署名の設定をしていない場合、electron-builderでビルド時(electron-builder build)に、skipped macOS application code signingとメッセージが出ます。

  • electron-builder  version=21.2.0 os=19.0.0
  • loaded configuration  file=/Users/Tomoyuki/Documents/GitRepo/GitHub/photo-location-map/electron-builder.json
  • writing effective config  file=release/builder-effective-config.yaml
  • packaging       platform=darwin arch=x64 electron=7.0.0 appOutDir=release/mac
  • skipped macOS application code signing  reason=cannot find valid "Developer ID Application" identity or custom non-Apple code signing certificate, see https://electron.build/code-signing 

署名の設定をする

まずは署名が必要です。署名のためには次の2つが必要です。

  1. Apple Developer Programに登録する。
  2. XcodeでDeveloper ID Applicationを作成する。

Developer ID Applicationは、Xcodeを起動し、Preferencesから、次の画像の通りにすると作成できます。途中、Apple IDのユーザ名・パスワードを入力するポップアップが出てきますので、Apple Developer Program登録の際に紐つけたApple IDを使います。

image.png

image.png

image.png

Developer ID Applicationを作成後は、electron-builderでビルド時に「Developer ID Applicationを使ってsignした」というメッセージが出るようになります。

  • electron-builder  version=21.2.0 os=19.0.0
  • loaded configuration  file=/Users/Tomoyuki/Documents/GitRepo/GitHub/photo-location-map/electron-builder.json
  • writing effective config  file=release/builder-effective-config.yaml
  • packaging       platform=darwin arch=x64 electron=7.0.0 appOutDir=release/mac
  • signing         file=release/mac/Photo Location Map.app identityName=Developer ID Application: Tomoyuki Aota 

署名済みかつ公証なしの場合

署名済みかつ公証なしの場合、インターネット上からダウンロードしたアプリケーションを起動しようとすると、次のメッセージが出て、起動できません。

image.png

公証の設定をする

公証の方法については、次のページを参考にしました。
Notarizing your Electron application | Kilian Valkhof

私が開発中のアプリケーションでは、次の変更が必要でした。
https://github.com/TomoyukiAota/photo-location-map/pull/192/files

Apple IDやApp Specific Passwordを指定する必要がありますが、これらは、環境変数に格納するようにしました。
https://github.com/TomoyukiAota/photo-location-map/pull/192/files#diff-55db2099c7a0eff7f93007cafce6c7ebR24-R25

    appleId: process.env.APPLE_ID, 
    appleIdPassword: process.env.APPLE_APP_SPECIFIC_PASSWORD,

公証は5−10分程度かかります。公証が終わるとアップルからメールが来ます。
image.png

ついでに、公証の結果を確認するスクリプトを入れておくと便利です。公証に時間がかかっている場合などの調査に役に立ちます。(Notary Serviceが落ちていることがあったりします。) ターミナル上では、xcrun altool --notarization-history 0 -u ${appleId} -p ${appSpecificPassword}${appleId}${appSpecificPassword}はそれぞれ置き換える)なので、それをラップしたスクリプトを用意すればいいと思います。私の場合は先程の変更の中で、script/notarize/get-notarization-history.jsというスクリプトを用意しました。

署名済みかつ公証済みの場合

インターネット上からダウンロードしたアプリケーションを起動すると、次のポップアップが出ます。アプリケーションが起動できるようになりました。

image.png

おわりに

公証はmacOS 10.14.5やmacOS 10.15で必須とされたので、2019年11月現在、必要な作業やライブラリ(electron-notarize)関連の設定など、まだ流動的な面があります。ですので、この記事に書かれていることに加えて、最新の情報を追うように心がけると良いと思います。

TomoyukiAota
Stack Overflow: https://goo.gl/o3i9Do dev.to: https://dev.to/tomoyukiaota
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away