Electron-Macアプリの公証(notarization)をCD/CIでやってみた
概要
タイトル通りですが、Electronで作成したMacアプリのビルド・公証・インストーラー(dmg)の作成をGitHub Actionsでやってみました。
動作したプロジェクトがこちらです。
パッケージ
利用しているパッケージは下記になります(抜粋。全体はリポジトリを参照)
"@electron/notarize": "^2.5.0",
"dotenv": "^16.5.0",
"electron": "^28.0.0",
"electron-builder": "^26.0.12",
package.json の設定
"build": {
"afterSign": "scripts/notarize.js"
},
buildブロックの中でnotarize.js
をしており、公証自体はそこで行っています。
ビルドに利用するplistやiconはresourcesフォルダにコミットしておきます。
notarize.js で利用するシークレット
GitHub Actionsで利用するため、環境変数はシークレット(Repository secrets)に入れておきます。
Settings > Secrets and variables > Actions > Repository secrets
下記項目が必要になります
-
MACOS_CERTIFICATE
: Base64エンコードされた.p12証明書ファイル -
MACOS_CERTIFICATE_PWD
: 証明書のパスワード -
KEYCHAIN_PASSWORD
: キーチェーンのパスワード(任意の値) -
APPLE_ID
: Apple Developer Programのアカウントメールアドレス -
APPLE_APP_SPECIFIC_PASSWORD
: App固有のパスワード -
APPLE_TEAM_ID
: Apple Developer Teamの識別子
外部配布用の証明書の作り方
MACOS_CERTIFICATE
: Base64エンコードされた.p12証明書ファイル
こちらの作り方です。
まず前提条件として、有料のApple Developerに登録する必要があります。
証明書の作成
キーチェーンアクセスを起動して、証明書アシスタント > 認証局に証明書を要求... メニューを選択します。ユーザのメールアドレス、通称を入力して「ディスクに保存」を選択します。すると「CertificateSigningRequest.certSigningRequest」というファイル名で保存されます。
Developer ID Applicationの作成
DeveloperページのCertificates, Identifiers & Profilesに行き、「Developer ID Application」を選択します。
次のページではProfile TypeのG2 Sub-CAを選択して、Choose Fileで、先ほどキーチェーンアクセスで作成しておいた「CertificateSigningRequest.certSigningRequest」を選択します。
作成された証明書をダウンロードしてダブルクリックし、キーチェーンアクセスに登録します。
証明書の書き出しとエンコード
キーチェーンアクセスの「Developer ID Application: 氏名(TeamID)」を右クリックし、p12
形式で書き出します。
書き出す際にパスワードを聞かれるので適当な文字列を設定します。空白だとうまくいきません。
パスワードはMACOS_CERTIFICATE_PWD
としてシークレットに入力します。
書き出したp12ファイルを下記コマンドでBase64エンコードします。
base64 -i 証明書ファイル.p12 -o certificate.txt
cerificate.txtの内容を、シークレットのMACOS_CERTIFICATE
に入力します。
アプリ固有パスワード
アプリ固有パスワードAPPLE_APP_SPECIFIC_PASSWORD
については、Apple ID設定ページの「アプリ用パスワード」から発行します。
GitHub Actions
こちらもリポジトリ内のbuild.yml
を参照ください。
Apple-Actions/import-codesign-certs@v2
を使ってCertificateを取得した後に、npm run dist
が実行され、electron-builderが動作します。
Discussion