提出IDを控え忘れた場合や、失敗した公証の提出IDを探したい場合は、過去の提出を一覧すれば見つかる。notarytool historyは、Teamの過去の提出を一覧する。
$ xcrun notarytool history -p "[プロファイル名]"
ここでは、出力の見方と、jqでの絞り込み、提出IDからinfoやlogにつなぐ方法を紹介する。実行例はXcode 27.0に含まれるnotarytool 1.1.3のもの。
過去の提出を一覧する
historyに認証情報を指定して実行する。提出が1件ずつ、区切り線で区切られて表示される。
$ xcrun notarytool history -p "[プロファイル名]"
Successfully received submission history.
history
--------------------------------------------------
createdDate: [提出した日時]
id: [提出ID]
name: [提出したファイル名]
status: Accepted
--------------------------------------------------
createdDate: [提出した日時]
id: [提出ID]
name: [提出したファイル名]
status: Invalid
--------------------------------------------------
...
各提出には、次の4つの項目が表示される。
| 項目 | 内容 |
|---|---|
createdDate | 提出した日時(UTC) |
id | 提出ID |
name | 提出したファイル名 |
status | 公証の状態(Accepted、Invalidなど) |
一覧は、提出日時の新しい順に並ぶ。先頭が最新の提出である。認証に使ったキーやApple IDの情報は含まれない。
参考: 【notarytool】App用パスワードで公証用の認証情報を保存する
同じTeamの提出がすべて含まれる
historyが返すのは、認証したユーザーの提出ではなく、Team全体の提出である。同じTeamの別のアプリや、別のマシンから提出したものも一覧に含まれる。
認証にApp用パスワードを使っても、APIキーを使っても、同じTeamであれば同じ一覧になる。
jqで提出を絞り込む
件数が増えると、目的の提出を目で探すのは大変になる。-f jsonで出力して、jqで絞り込む。
$ xcrun notarytool history -p "[プロファイル名]" -f json > history.json
JSONの最上位には、history(配列)とmessageがある。historyの各要素は、createdDate、id、name、statusのキーを持つ。
参考: 【notarytool】結果をJSON・plistで出力してスクリプトで使う (-f)
失敗した提出のIDを取り出す
公証が失敗した提出は、statusがInvalidの提出である。
$ jq -r '.history[] | select(.status=="Invalid") | .id' history.json
[提出ID]
[提出ID]
...
ファイル名で絞り込む
nameでファイル名を指定すると、特定のアプリの提出だけを取り出せる。
$ jq -r '.history[] | select(.name=="[アプリ名].zip") | "\(.createdDate) \(.status)"' history.json
[提出した日時] Invalid
日付で絞り込む
createdDateは、ISO 8601形式の文字列である。文字列のまま比較できる。指定した日以降の提出を数える例を示す。
$ jq '[.history[] | select(.createdDate >= "2026-10-05")] | length' history.json
6
日時はUTCなので、日本時間の日付とは9時間ずれる。日本時間の午前9時より前の提出は、前日の日付になる。
最新の提出IDを取り出す
一覧は新しい順に並ぶため、.history[0]が最新の提出である。
$ jq -r '.history[0].id' history.json
[提出ID]
タブ区切りで一覧する
@tsvを使うと、日時、状態、ファイル名、提出IDをタブ区切りで出力できる。
$ jq -r '.history[:3][] | [.createdDate, .status, .name, .id] | @tsv' history.json
[提出した日時] Accepted [ファイル名] [提出ID]
[提出した日時] Accepted [ファイル名] [提出ID]
[提出した日時] Invalid [ファイル名] [提出ID]
.history[:3]で、先頭の3件に絞っている。
提出IDからinfoとlogにつなぐ
historyで見つけた提出IDは、infoやlogに渡せる。infoは提出1件の状態を取得し、logは完了した提出のログを取得する。
失敗した提出のログを、jqで要約する例を示す。
$ ID=$(jq -r '[.history[] | select(.status=="Invalid")][0].id' history.json)
$ xcrun notarytool log $ID -p "[プロファイル名]" | jq -c '{status, statusSummary, issues: (.issues | length)}'
{"status":"Invalid","statusSummary":"Archive contains critical validation errors","issues":3}
select(.status=="Invalid")で、失敗した提出を取り出している。[0]は、そのうち最新の提出である。ログのissuesに、失敗の原因が配列で入っている。
参考: 【notarytool】公証に失敗した理由をログから調べる
