インストーラ形式で配布しているアプリでは、アプリ本体のNotarization対応の他に、インストーラもNotarizationに対応する必要があります。
この記事では、macOSのインストーラのNotarization対応について解説します。
インストーラの作り方のあらまし
macOSでインストーラを作るときには、次のような2つの工程があります。
pkgbuild
を使い、インストーラのコンポーネントパッケージを作成する。productbuild
を使い、配布するインストーラを作成する。
これらに加えて、配布形式がディスクイメージでならば、ディスクユーティリティやhdiutils
を使って、dmgファイルを作るという作業が続きます。
最後に、配布するファイルを Apple Notarization Services に登録します。
公証を得るための条件
公証を得るための条件の中で、インストーラに関係してくるのは次の項目です。
- Developer ID Application証明書、または、Developer ID Installer証明書を使ってコードサイニングを行う。
- コードサイニング署名にセキュアタイムスタンプを含める。
私はDeveloper ID Installer証明書を使用しました。Developer ID Application証明書でもインストーラの公証を得られるかは未確認です。
コンポーネントパッケージと配布インストーラの関係
配布インストーラは複数のコンポーネントパッケージで構成されます。
配布インストーラのカスタマイズで、インストールするかどうかを選択できる選択肢単位で作成します。カスタマイズ機能は、配布インストーラ内に組み込まれた、コンポーネントパッケージをインストールするかどうかを選択する機能なのです。
そのため、簡易インストールのみの場合はコンポーネントパッケージは一つ作成するだけでもOKです。
一般的には、インストール先のディレクトリ単位で作ることが多いと思います。例えば、次のような感じでしょうか。
- アプリケーション本体
- ドライバなどエクステンション
- プラグインなどの追加モジュール
- リファレンスやヘルプなどのドキュメントファイル
インストーラの公証を得る
インストーラの公証を得るには、コンポーネントパッケージと配布インストーラの両方で公証を得るための条件を満たすようにします。
コンポーネントパッケージのコードサイニング
コンポーネントパッケージのコードサイニングを行うには、pkgbuild
に--sign
オプションと--timestamp
オプションを指定します。
次のような感じです。
pkgbuild --root root_dir \
--component-plist components.plist \
--identifier "com.example.app" \
--version "1.0.0" \
--install-location "/Applications" \
--sign "Developer ID Installer: Example" \
--timestamp \
com.example.app.pkg
--sign
オプションでコードサイニングする証明書を指定し、--timestamp
オプションでセキュアタイムスタンプを含めるようにしています。
配布インストーラのコードサイニング
配布インストーラのコードサイニングを行うには、productbuild
に--sign
オプションと--timestamp
オプションを指定します。
次のような感じです。
productbuild --distribution "distribution.xml" \
--package-path "./" \
--resources "Resources" \
--sign "Developer ID Installer: Example" \
--timestamp \
ExampleApp.pkg
pkgbuild
オプションと同じです。--sign
オプションでコードサイニングする証明書を指定し、--timestamp
オプションでセキュアタイムスタンプを含めるようにしています。