notarytool store-credentialsで保存したプロファイルが不要になったら、keychainから削除したい。notarytoolには、プロファイルを削除するサブコマンドがない。削除する方法は、保存先によって異なる。

  • 既定の保存先に保存した場合: Keychain Access.appで項目を削除する
  • --keychainでファイルkeychainに保存した場合: security delete-generic-passwordで項目を削除する

どちらの場合も、削除後にnotarytool historyが終了コード69になれば、削除できている。

$ xcrun notarytool history -p "[プロファイル名]"
Error: No Keychain password item found for profile: [プロファイル名]

Run 'notarytool store-credentials' to create another credential profile.
$ echo $?
69

ここでは、保存先ごとの削除手順と、削除できたかの確認方法を紹介する。実行例はXcode 27.0に含まれるnotarytool 1.1.3のもの。

参考: 【notarytool】App用パスワードで公証用の認証情報を保存する

既定の保存先の項目を削除する

--keychainを指定せずにstore-credentialsした場合、認証情報はdata protection keychainに保存される。Apple公式のTN3147 によると、Keychain Access.appでは「iCloudキーチェーン」に表示される。iCloudキーチェーンが無効な場合は「ローカル項目」に表示される。

securityコマンドでは見つからない

data protection keychainの項目は、securityコマンドで見つからない。保存済みのプロファイルを指定しても、次のように見つからないエラーになる。

$ security find-generic-password -a "com.apple.gke.notary.tool.saved-creds.[プロファイル名]"
security: SecKeychainSearchCopyNext: The specified item could not be found in the keychain.
$ echo $?
44

同じプロファイルは、notarytool history -pでは使える。securityコマンドで見つからなくても、プロファイルは存在する場合がある。

Keychain Access.appで削除する

  1. Keychain Access.appを開く
  2. 左のサイドバーで「iCloudキーチェーン」を選ぶ。iCloudキーチェーンが無効な場合は「ローカル項目」を選ぶ
  3. 検索欄にcom.apple.gke.notary.toolを入力する
  4. 削除するプロファイルの項目を選び、アカウントを確認する
  5. 項目を削除する

項目の名前は、どのプロファイルもcom.apple.gke.notary.toolである。プロファイルの違いは、アカウントで見分ける。アカウントはcom.apple.gke.notary.tool.saved-creds.[プロファイル名]の形式である。

名前の列だけでは、プロファイルを見分けられない。複数のプロファイルを保存している場合は、項目を1つずつ選び、アカウントに削除対象のプロファイル名が含まれていることを確認してから削除する。

削除できたかを確認する

削除後は、notarytool historyで確認する。

$ xcrun notarytool history -p "[プロファイル名]"
Error: No Keychain password item found for profile: [プロファイル名]

Run 'notarytool store-credentials' to create another credential profile.
$ echo $?
69

No Keychain password item found for profileと表示され、終了コードが69であれば、削除できている。Successfully received submission history.が表示される場合は、プロファイルが残っている。

ファイルkeychainの項目を削除する

--keychainでファイルkeychainに保存した場合は、securityコマンドで項目を確認し、削除できる。ここでは、検証用のkeychainを作り、プロファイルを保存して削除する。

$ security create-keychain -p [keychainのパスワード] $PWD/verify.keychain-db
$ security unlock-keychain -p [keychainのパスワード] $PWD/verify.keychain-db
$ xcrun notarytool store-credentials "[プロファイル名]" -k [AuthKey_XXXXXXXXXX.p8のパス] -d [Key ID] -i [Issuer ID] --keychain $PWD/verify.keychain-db
...
Credentials saved to Keychain.
To use them, specify `--keychain-profile "[プロファイル名]" --keychain [verify.keychain-dbのフルパス]`

security create-keychainに相対パスを指定すると、keychainファイルはカレントディレクトリではなく~/Library/Keychains/に作られる。--keychainには存在するファイルのパスを指定するため、ここでは$PWDを使った絶対パスで指定している。

APIキーの保存方法は、【notarytool】App Store Connect APIキーで認証する (-k -d -i) を参照。

保存された項目を確認する

security dump-keychainで、ファイルkeychainの項目の属性を確認できる。

$ security dump-keychain $PWD/verify.keychain-db | grep -E 'class|"svce"|"acct"'
class: "genp"
    "acct"<blob>="com.apple.gke.notary.tool.saved-creds.[プロファイル名]"
    "svce"<blob>="appStoreConnect"

アカウントがcom.apple.gke.notary.tool.saved-creds.[プロファイル名]である。APIキーで保存した場合のsvceはappStoreConnectだった。

-aにアカウントを指定すると、security find-generic-passwordでも項目を探せる。最後にkeychainのパスを指定する。

$ security find-generic-password -a "com.apple.gke.notary.tool.saved-creds.[プロファイル名]" $PWD/verify.keychain-db
keychain: "[verify.keychain-dbのフルパス]"
    ...
    "acct"<blob>="com.apple.gke.notary.tool.saved-creds.[プロファイル名]"
    "svce"<blob>="appStoreConnect"

パスワードや秘密鍵の中身を表示する-wや-gは、指定しない。

security delete-generic-passwordで削除する

同じ-aの指定で、security delete-generic-passwordを実行すると、項目を削除できる。

$ security delete-generic-password -a "com.apple.gke.notary.tool.saved-creds.[プロファイル名]" $PWD/verify.keychain-db
...
password has been deleted.

削除後にhistoryを実行すると、終了コード69になる。

$ xcrun notarytool history -p "[プロファイル名]" --keychain $PWD/verify.keychain-db
Error: No Keychain password item found for profile: [プロファイル名]

Run 'notarytool store-credentials' to create another credential profile.
$ echo $?
69

keychainごと不要な場合は、security delete-keychainでファイルを削除する。

$ security delete-keychain $PWD/verify.keychain-db

security delete-keychainで削除したkeychainは、security list-keychains -d userの一覧に残らない。

App用パスワードとAPIキーはApple側で失効させる

プロファイルを削除しても、Apple側のApp用パスワードやAPIキーは失効しない。keychainから削除するのは、保存したコピーだけである。

  • App用パスワード: account.apple.comの「アプリ用パスワード」で削除する
  • APIキー: App Store Connectの「ユーザとアクセス」の「統合」で失効させる

コピーを削除しても、App用パスワードやAPIキーが漏えいしている可能性がある場合は、Apple側で失効させる。