アプリの公証は、提出してから完了するまで時間がかかる。提出だけを済ませて別の作業を進め、あとから公証の完了を待ちたい場合がある。notarytool submitは既定で完了を待たず、提出IDだけを返す。完了の待機は、notarytool waitで別に実行できる。
$ xcrun notarytool submit [アプリ名].zip -p "[プロファイル名]"
$ xcrun notarytool wait [提出ID] -p "[プロファイル名]"
ここでは、提出と待機を分ける方法と、--timeoutで待機を打ち切る方法、終了コードの違いを紹介する。実行例はXcode 27.0に含まれるnotarytool 1.1.3のもの。
提出だけを済ませて提出IDを受け取る
submitに--waitを付けなければ、アップロードが終わった時点でコマンドが終了する。--wait/--no-waitの既定値は--no-waitである。
$ xcrun notarytool submit hello.zip -p "[プロファイル名]"
Conducting pre-submission checks for hello.zip and initiating connection to the Apple notary service...
Submission ID received
id: [提出ID]
Successfully uploaded file
id: [提出ID]
path: [hello.zipのパス]
$ echo $?
0
公証の結果は、この時点では分からない。表示されたidが提出IDである。提出IDは、waitやinfo、logに渡す。
waitで公証の完了を待つ
提出IDをwaitに渡すと、公証が完了するまで待つ。
$ xcrun notarytool wait [提出ID] -p "[プロファイル名]"
Waiting for processing to complete.
Current status: In Progress...Current status: In Progress....Current status: Accepted.....Processing complete
id: [提出ID]
status: Accepted
Current status:の行に、状態の変化が表示される。最終的な状態がstatus:に表示される。公証が通った場合はAccepted、失敗した場合はInvalidなどになる。
完了済みの提出にもwaitできる
公証が完了した提出にwaitを実行すると、待たずにすぐ結果を表示する。
$ xcrun notarytool wait [提出ID] -p "[プロファイル名]"
Waiting for processing to complete.
Processing complete
id: [提出ID]
status: Accepted
提出済みの結果を確認したいだけの場合にも、waitが使える。
Invalidでも終了コードは0になる
公証がInvalidになっても、waitの終了コードは0である。
$ xcrun notarytool wait [Invalidになった提出ID] -p "[プロファイル名]"
Waiting for processing to complete.
Current status: In Progress...Current status: Invalid....Processing complete
id: [提出ID]
status: Invalid
$ echo $?
0
スクリプトで公証の成否を判定する場合は、終了コードではなく、出力のstatusを確認する。submit --waitでも同じ挙動になる。
参考: 【notarytool】公証に失敗した理由をログから調べる
--timeoutで待機を打ち切る
--timeoutを指定すると、指定した時間だけ待って、完了していなければ待機を打ち切る。
$ xcrun notarytool wait [提出ID] -p "[プロファイル名]" --timeout 1
Waiting for processing to complete. Wait timeout is set to 1.0 second(s).
Current status: In Progress...Timeout of 1 second(s) was reached before processing completed.
id: [提出ID]
$ echo $?
124
打ち切った場合の終了コードは124である。公証が完了していないため、statusは表示されない。
submit --waitに--timeoutを組み合わせても、同じ出力と終了コードになる。
$ xcrun notarytool submit hello.zip -p "[プロファイル名]" --wait --timeout 1
...
Waiting for processing to complete. Wait timeout is set to 1.0 second(s).
Current status: In Progress...Timeout of 1 second(s) was reached before processing completed.
id: [提出ID]
$ echo $?
124
打ち切っても公証は続く
--timeoutで打ち切るのは、notarytoolの待機だけである。Appleの公証サービス側の処理は続く。打ち切った提出の状態をあとからinfoで取得すると、Acceptedになっていた。
$ xcrun notarytool info [提出ID] -p "[プロファイル名]"
Successfully received submission info
createdDate: [提出した日時]
id: [提出ID]
name: hello.zip
status: Accepted
打ち切ったあとは、同じ提出IDでwaitやinfoを再度実行する。同じファイルを再提出する必要はない。
時間の単位
--timeoutには、整数と、省略可能な単位を指定する。
| 指定 | 待機時間 |
|---|---|
1、1s | 1秒(単位を省略すると秒) |
1m | 1分(60秒) |
1h | 1時間 |
--helpには、3600、60m、1hの例が書かれている。1mを指定すると、Wait timeout is set to 60.0 second(s).と表示された。
指定が不正な場合は、終了コード64で終了する。s、m、h以外の単位や、0は指定できない。1.5のような整数以外の値や、負の値も指定できない。
$ xcrun notarytool wait [提出ID] -p "[プロファイル名]" --timeout abc
Error: The value 'abc' is invalid for '--timeout <duration>': Invalid suffix 'c'. Must be one of 's', 'm', 'h'.
...
$ xcrun notarytool wait [提出ID] -p "[プロファイル名]" --timeout 0
Error: The value '0' is invalid for '--timeout <duration>': Must specify a duration greater than 0.
...
終了コードのまとめ
waitで確認した終了コードをまとめる。
| 状況 | 終了コード |
|---|---|
公証が完了した(Accepted・Invalidとも) | 0 |
--timeoutで打ち切った | 124 |
| 提出IDが存在しない、またはほかのTeamの提出である | 69 |
提出IDがUUIDの形式でない、--timeoutの値が不正 | 64 |
存在しない提出IDを指定した場合は、次のように表示される。
$ xcrun notarytool wait 00000000-0000-0000-0000-000000000000 -p "[プロファイル名]"
Waiting for processing to complete.
Submission does not exist or does not belong to your team.
id: 00000000-0000-0000-0000-000000000000
$ echo $?
69
infoとの使い分け
infoは、提出の現在の状態を1回だけ取得して終了する。処理中の提出では、In Progressが表示される。
| サブコマンド | 動作 |
|---|---|
info | 現在の状態を1回取得して終了する |
wait | 完了するまで状態を確認し続ける |
処理中かどうかだけを確認したい場合はinfo、完了まで待ちたい場合はwaitを使う。
