提出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】公証に失敗した理由をログから調べる