😎

Electron-Macアプリの公証(notarization)をCD/CIでやってみた

に公開

概要

タイトル通りですが、Electronで作成したMacアプリのビルド・公証・インストーラー(dmg)の作成をGitHub Actionsでやってみました。
動作したプロジェクトがこちらです。

https://github.com/torikasyu/CoPiPe-Share

パッケージ

利用しているパッケージは下記になります(抜粋。全体はリポジトリを参照)

    "@electron/notarize": "^2.5.0",
    "dotenv": "^16.5.0",
    "electron": "^28.0.0",
    "electron-builder": "^26.0.12",

package.json の設定

https://github.com/torikasyu/CoPiPe-Share/blob/main/package.json

  "build": {
    "afterSign": "scripts/notarize.js"
  },

buildブロックの中でnotarize.jsをしており、公証自体はそこで行っています。
ビルドに利用するplistやiconはresourcesフォルダにコミットしておきます。

notarize.js で利用するシークレット

https://github.com/torikasyu/CoPiPe-Share/blob/main/scripts/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を参照ください。
https://github.com/torikasyu/CoPiPe-Share/blob/main/.github/workflows/build.yml

Apple-Actions/import-codesign-certs@v2を使ってCertificateを取得した後に、npm run distが実行され、electron-builderが動作します。

Discussion