notarytoolでアプリの公証を依頼するたび、Apple IDとパスワードを入力するのは面倒である。notarytool store-credentialsで認証情報をキーチェーンに保存すると、以降は--keychain-profileでプロファイル名を指定するだけで提出できる。
$ xcrun notarytool store-credentials "[プロファイル名]" --apple-id [Apple ID] --team-id [Team ID]
認証にはApple IDのパスワードではなく、App用パスワード(App-Specific Password)を使う。ここでは、App用パスワードの発行から、store-credentialsでの保存、動作確認までを紹介する。実行例はXcode 27.0に含まれるnotarytoolのもの。
- 前の記事: 【codesign】署名の内容と整合性を検証する
- 親記事: GitHubを使い、macOSアプリを署名・公証・自動アップデート付きで公開する
- 次の記事: 【notarytool】アプリを公証してstaple(公証チケットを添付)する
App用パスワードを発行する
App用パスワードは、Apple Accountのサイト(account.apple.com)で発行する。Apple Account側の画面は、日本語で表示される場合のものを掲載する。
- account.apple.comにサインインし、「サインインとセキュリティ」の「アプリ用パスワード」を開く
発行済みのパスワードがある場合は、ラベルと作成日が一覧に表示される。

- 「+」を押して、パスワードのラベルを入力する

ラベルは、用途が分かる名前にする。例えば、notarytool for [アプリ名]のようにする。
- 「作成」を押す
- 「パスワードを確認」が表示されたら、Apple Accountのパスワードを入力して「続ける」を押す
- 表示されたパスワードを控える
パスワードは、xxxx-xxxx-xxxx-xxxxの形式で表示される。表示されるのは、作成した直後の1回だけである。一覧には、ラベルと作成日だけが残る。
ラベルに記号は使えない
ラベルに括弧などの記号を含めると、「パスワードラベルに特殊文字を含めることはできません。」というエラーになる。

notarytool for ReleaseTestApp (test)はエラーになり、括弧を外したnotarytool for ReleaseTestApp testは作成できた。ラベルには、記号を使わない。
store-credentialsで認証情報を保存する
store-credentialsに、プロファイル名、Apple ID、Team IDを指定して実行する。パスワードは、実行中のプロンプトに入力する。
$ xcrun notarytool store-credentials "[プロファイル名]" --apple-id [Apple ID] --team-id [Team ID]
This process stores your credentials securely in the Keychain. You reference these credentials later using a profile name.
App-specific password for [Apple ID]:
Validating your credentials...
Success. Credentials validated.
Credentials saved to Keychain.
To use them, specify `--keychain-profile "[プロファイル名]"`
App-specific password for [Apple ID]:のプロンプトに、先ほど発行したApp用パスワードを貼り付ける。入力した文字は、画面に表示されない。
Validating your credentials...で、Appleのサーバーに認証できるかが検証される。Success. Credentials validated.が表示されれば、パスワードは有効である。続けて、Credentials saved to Keychain.と表示され、キーチェーンに保存される。
パスワードをコマンドの引数に渡すと、シェルの履歴に残る。プロンプトへの入力であれば、履歴に残らない。
保存した認証情報を確認する
保存した認証情報が使えるかは、notarytool historyで確認できる。--keychain-profileにプロファイル名を指定する。
$ xcrun notarytool history --keychain-profile "[プロファイル名]"
Successfully received submission history.
history
--------------------------------------------------
createdDate: [提出した日時]
id: [提出ID]
name: [提出したファイル名]
status: Accepted
--------------------------------------------------
...
Successfully received submission history.が表示されれば、認証は成功している。
historyには、Teamとして過去に提出した履歴が表示される。同じTeamの別のアプリを提出した履歴も、一覧に含まれる。
以降のnotarytool submitやnotarytool logでも、同じ--keychain-profileを指定する。
参考: 【notarytool】アプリを公証してstaple(公証チケットを添付)する
参考: 【notarytool】公証に失敗した理由をログから調べる
$ xcrun notarytool submit [アプリ名].zip --keychain-profile "[プロファイル名]" --wait
不要になったApp用パスワードを失効させる
App用パスワードが不要になったら、account.apple.comの一覧から削除して失効させる。App用パスワードは、Apple IDのパスワードとは別に管理されるため、Apple IDのパスワードを変更せずに失効できる。
App Store Connect APIキーで認証する方法もある
notarytoolは、App用パスワードのほかに、App Store Connect APIキーでも認証できる。CIでApple IDとパスワードを使いたくない場合は、APIキーを使う方法を検討する。
