macOS 10.15以上でアプリを実行するために必要になるNotarization処理

アプリのNotarization

macOS 10.15以上でアプリを配布する場合、アプリのNotarizationを行う必要がある。App Storeからアプリを配布する場合はXCodeでアップロードする際に行われるので、特に気にする必要は無い。

Notarizing macOS Software Before Distribution

コマンドラインでNotarization

App Store外でアプリを配布する場合は自分でコマンドラインを使用してアプリのNotarizationを行う必要がある。

Upload Your App to the Notarization Service

$ xcrun altool --notarize-app -f <zip, pkg, dmgファイル> --primary-bundle-id <任意のバンドルID> -u <Apple Developer ID> -p <App Specific Passwords> --asc-provider <Provider Short Name>
  • -f に指定可能なファイル以下の3種類のみ。
    • .appファイルをzipした.zipファイル
    • .dmgファイル
    • .pkgファイル
  • --primary-bundle-id に指定するIDは何でも良い。後でNotarizationのステータスを取得する場合はアプリのバンドルIDに何か文字列を追加して固有のIDを指定すると良い。
  • -u にはアプリの署名に使用した証明書のApple Develper IDを指定する。
  • -p はアプリ専用のパスワード。以下で生成する。
    support.apple.com
  • --asc-provider は使用しているApple IDが別のApple IDに関連付けされている場合に必要になる。そうでなければ省略可能。指定する文字列は以下で取得可能。
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u <Apple Developer ID> -p <App Specific Passwords> -account_type itunes_connect

--asc-providerオプションの指定が必要な場合に発生するエラー

Apple IDが他のApple IDに関連付けされている場合、xcrunを実行すると以下のエラーが発生する。

Your Apple ID account is attached to other iTunes providers. You will need to specify which provider you intend to submit content to by using the -itc_provider command. Please contact us if you have questions or need help. (1627)

Notarizationのチェック

Notarizationが正常に終了した場合、Appleから以下のタイトルのメールが届く。

Your Mac software was successfully notarized.

spctlコマンドを使用してアプリやインストーラに対してNotarizationが正常に行われているかどうかチェックすることができる。

Notarizeされていないアプリ
$ spctl -a -vvv  <.appファイルパス>
<.appファイルパス>: accepted
source=Developer ID
origin=Developer ID Application: XXXXXX (XXXXXX)
Notarizeされているアプリ
$ spctl -a -vvv <.appファイルパス> 
<.appファイルパス>: accepted
source=Notarized Developer ID
origin=Developer ID Application: XXXXXX (XXXXXX)
Notarizeされていないインストーラ
$ spctl -a -vvv -t install <.pkgファイルパス>
<.pkgファイルパス>: rejected
source=Unnotarized Developer ID
origin=Developer ID Installer: XXXXXX (XXXXXX)
Notarizeされているインストーラ
$ spctl -a -vvv -t install <.pkgファイルパス> 
<.pkgファイルパス>: accepted
source=Notarized Developer ID
origin=Developer ID Installer: XXXXXX (XXXXXX)

Stapleを行う

Notarizationをオフライン環境でもチェックできるよう、Stapleと呼ばれる作業を行う。別に行わなくても問題はない。Notarizationが終了した後で以下のコマンドを実行するだけ。

$ xcrun stapler staple <.appファイルパス>

*Notarizationが終了する前に実行するとエラーになる。