インストーラのNotarization Service対応

インストーラ形式で配布しているアプリでは、アプリ本体のNotarization対応の他に、インストーラもNotarizationに対応する必要があります。

この記事では、macOSのインストーラのNotarization対応について解説します。

スポンサーリンク

インストーラの作り方のあらまし

macOSでインストーラを作るときには、次のような2つの工程があります。

  1. pkgbuild を使い、インストーラのコンポーネントパッケージを作成する。
  2. 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オプションでセキュアタイムスタンプを含めるようにしています。

スポンサーリンク
最新情報をチェックしよう!
>現役のプログラマーが書くプログラミング情報

現役のプログラマーが書くプログラミング情報

日々の開発の中での学びや分かったこと、調べたことなどを書いていくブログです。

CTR IMG