ハイライト
Apple は、Xcode での Mac アプリケーションの公証に特化した notarytool を提供しています。これにより、App Store の外で配布される Mac ソフトウェアが 1 つのコマンドで公証結果を送信して待機できるようになり、より高速なアップロードと CI コールバックがサポートされます。
主要内容
Mac アプリが App Store を通じて配布されていない場合は、通常、公開する前に公証プロセスを通過する必要があります。開発者がソフトウェアを Apple に渡すと、Notary サービスが悪意のあるコンテンツやコード署名の問題をチェックします。合格すると、Apple がチケットを発行し、ユーザーがアプリを起動したときに macOS がチケットをチェックします。
以前は、これはコマンド ラインを使用して行われていました。共通のエントリーポイントはaltool。 App Store と Notary の複数カテゴリのタスクについて説明します。 Mac アプリケーションを公証したいだけの開発者にとって、このプロセスは複雑すぎます。最初に圧縮パッケージを送信し、次に送信 ID を取得し、ステータスを繰り返しクエリする必要があります。 CI スクリプトは、コマンド出力を解析してタスクが完了したかどうかを判断する必要もあります。
今回のWWDC21セッションでの変更点は以下の通りです。notarytool。これは、Xcode とともに配布される新しい Notary クライアントで、公証プロセスのみを対象としています。submitコマンドプラス--waitその後、クライアントはアップロードし、処理を待って、結果を返します。
この変更により、公開リンクにおける待機の問題が解決されます。 Mac アプリケーションのバグを修正した後、開発者はアーカイブ、圧縮、公証への提出、結果の待機を同じ自動パイプラインに入れることができます。また、Notary サービスは専用のバックエンドを追加し、ほとんどの開発者にとってアップロード速度を最大 4 倍に向上させます。
ポーリングスクリプトから単一行コマンドへ
前回のスクリプトは「待つ」ことに焦点を当てていました。提出完了後、CI は時々ステータスを確認する必要があります。ステータスはまだですin progress完了したらスリープを続けて、次のステップに進みます。
notarytoolこの待機ロジックをクライアントに移動します。開発者がコミットを書き込むと、ツールがアップロードと待機を処理します。スクリプトのループとテキスト出力の解析が少なくなります。
ローカルから CI コールバックへの待機
CI パイプラインは、1 つのタスクを占有して結果を待つのには必ずしも適していません。 Apple はセッションで Webhook 通知について言及しています。送信時に URL を指定すると、Notary 処理が完了した後にサーバーがコールバックされます。
これにより、公証結果によって後続のステップを逆にトリガーできるようになります。通知を受信した後、CI は結果と Notary ログを取得して、公開を続行するかどうかを決定します。
詳細
公証人サービスは何をチェックしますか?
(01:23) 公証のプロセスは非常に短く、ソフトウェアを構築し、公証人に提出し、自動分析を待って結果を取得し、ユーザーに配布します。 Notary は悪意のあるコンテンツをスキャンし、コード署名の問題をチェックします。
Build Mac software
Submit to Notary service
Automated analysis scans for malicious content
Automated analysis checks code signing issues
Notary publishes a ticket when there are no issues
macOS checks the software before launch
キーポイント:
Build Mac software: 開発者は最初に構築とパッケージ化を完了します。Submit to Notary service: 公証は配布前に行われます。Automated analysis scans for malicious content: Notary は悪意のあるコンテンツをスキャンします。Automated analysis checks code signing issues: コード署名の問題もチェック対象になります。Notary publishes a ticket when there are no issues:問題がなければチケットを発行します。macOS checks the software before launch: macOS は、ユーザーがソフトウェアを起動する前にソフトウェアをチェックします。
Apple はプレゼンテーションで処理時間の目標を示しました。公証人の提出の 98% は 15 分以内に完了し、ほとんどは 5 分以内に完了します。この数値は、公開プロセスのタイムアウト設定に入れるのに適しています。
altool のポーリング プロセス
(04:10)altoolコマンド ライン プロセスは 2 つの段階に分かれています。最初のステージではアプリケーションが送信され、第 2 ステージではループして送信ステータスがクエリされます。
# with altool
xcrun altool --notarize-app -f path/to/submission.zip \
--primary-bundle-id "$BUNDLE_ID" \
--apiKey "$KEY_ID" --apiIssuer "$ISSUER"
while true; do
INFO_OUT=$(2>&1 xcrun altool --notarization-info "$SUBMISSION_ID" -u "$USER" \
--apiKey "$KEY_ID" --apiIssuer "$ISSUER")
STATUS=$(echo "$INFO_OUT" | grep "Status:" | sed -Ee "s|.*: (.*)$|\1|" )
if [[ "$STATUS" != "in progress" ]]; then
break
fi
sleep 30
done
キーポイント:
xcrun altool --notarize-app:合格altool公証を受けるために圧縮パッケージを提出します。-f path/to/submission.zip:提出ファイルを指定します。--primary-bundle-id "$BUNDLE_ID": メインバンドル識別子を渡します。--apiKey "$KEY_ID" --apiIssuer "$ISSUER": App Store Connect API キー情報を認証に使用します。while true; do: 公証ステータスが変化するまで無限ループに入ります。xcrun altool --notarization-info "$SUBMISSION_ID": 提出 ID の公証情報を照会します。INFO_OUT=$(2>&1 ...): 標準エラー出力を含むコマンド出力を変数に保存します。grep "Status:" | sed -Ee ...: テキスト出力からステータスを抽出します。if [[ "$STATUS" != "in progress" ]]; then break: ステータスが Processing でなくなったら、ループを終了します。sleep 30: 30 秒ごとにクエリを実行します。
このスクリプトの脆弱性は状態解析です。出力形式が変わると、grepそしてsed期待した値が得られない可能性があります。パブリッシュ スクリプトには待機ロジックも含まれます。
提出してnotarytoolを待っています
(04:19)notarytool指定された新しいパスはコマンドです。submit投稿を担当し、--wait結果を待つ責任があります。
# with notarytool
notarytool submit path/to/submission.zip --wait \
--key "$KEY_PATH" --key-id "$KEY_ID" --issuer "$ISSUER"
キーポイント:
notarytool submit: 新しい Notary 専用クライアントを使用してソフトウェアを送信します。path/to/submission.zip: 送信された Mac ソフトウェア圧縮パッケージへのパス。--wait: 提出後、公証結果を待ち、完了後に提出結果を表示します。--key "$KEY_PATH": APIキーファイルのパスを指定します。--key-id "$KEY_ID": キー ID を渡します。--issuer "$ISSUER": 発行者情報を渡します。
ここでの重要な変更点は、--wait。開発者は独自のポーリング ループを作成する必要も、ポーリング ループを自分で解析する必要もありません。Status:文章。タスクが完了すると、ツールに送信結果が表示されます。
失敗の理由と Notary ログを確認してください
(04:36) 公証結果が返された後、開発者が公証ログを表示するコマンドは 1 つだけです。プレゼンテーションでは具体的なコマンドは示されなかったが、新規顧客は申請が公証されなかった理由を含む結果の詳細を直接閲覧できることが明らかになった。
notarytool
submit software
wait for result
view Notary log
inspect reasons when software is not notarized
キーポイント:
submit software: ソフトウェアを公証サービスに提出します。wait for result: タスクの処理が完了するまで待ちます。view Notary log: 新しいクライアントを使用して、公証ログを表示します。inspect reasons when software is not notarized: 失敗した場合に理由を表示し、署名またはコンテンツの問題を修正するために使用されます。
これはリリースのトラブルシューティングにとって重要です。従来、障害情報は送信、クエリ、ログ取得の各段階に点在していました。現在は、同じツールで詳細の送信、待機、表示がカバーされています。
Webhook 通知アクセス CI
(04:52) Webhook 通知は、このセッションのもう 1 つの新機能です。 Notary に送信する場合、開発者はサーバーのコールバック URL を指定できます。処理が完了すると、Notary からこの URL が通知されます。
Submit to Notary with a webhook URL
Notary finishes processing the software
Notary sends a server callback
CI retrieves the result
CI retrieves the Notary log
CI continues or stops the release workflow
キーポイント:
Submit to Notary with a webhook URL: 送信時にコールバック アドレスを持参します。Notary finishes processing the software: Notary が自動分析を完了します。Notary sends a server callback:サーバーは処理完了通知を受信します。CI retrieves the result: CI は通知に従って公証結果を取得します。CI retrieves the Notary log: CI は公証ログを同期的に取得します。CI continues or stops the release workflow: パイプラインは結果に基づいて公開を続行するか、中止します。
この機能は長いパイプラインに適しています。構築タスクをブロックしてずっと待つ必要はありません。 「公証完了」を後続のタスクのトリガーポイントとして使用できます。
重要ポイント
- やるべきこと: Mac アプリケーション用のワンクリック公開スクリプトを作成します。
- 実行する価値がある理由:
notarytool submit --wait送信と待機をマージすることにより、リリース スクリプトで作成するポーリング ロジックの量を減らすことができます。 - 開始方法: 既存のパッケージ化スクリプトの後に追加します
notarytool submit path/to/submission.zip --wait --key "$KEY_PATH" --key-id "$KEY_ID" --issuer "$ISSUER"をクリックし、成功したらアップロードまたは配布のステップに入ります。
- やるべきこと: Notary の結果を CI ステータス ページに統合します。
- 実行する価値がある理由: Webhook 通知を使用すると、Notary 完了イベントをサーバーが受信できるようになります。これは、リリースがどの段階で滞っているかを示すのに適しています。
- 開始方法: CI がコールバックを受信するための URL を準備し、公証を送信するときに URL を構成し、コールバック後に結果と公証ログを取得します。
- 対処方法: 公証失敗の自動アーカイブを作成します。
- 実行する価値がある理由:
notarytool失敗の理由と Notary ログを表示でき、失敗情報はビルド製品への反映に適しています。 - 開始方法: CI は、公証が失敗した場合に Notary ログを保存し、ログへのリンクをビルド レポートまたはプル リクエストのコメントに添付します。
- やるべきこと: 外部に配布される Mac アプリのリリース時間の予算を設定します。
- 実行する価値がある理由: Apple は、98% の送信が 15 分以内に完了し、ほとんどが 5 分以内に完了するというサービス目標を掲げており、それに応じてパイプラインのタイムアウトを設計できます。
- 開始方法: 公証ステップの CI タイムアウトを 15 分以上に設定し、各提出に要した時間を記録し、異常が見つかったときにアラートを送信します。
- 何をすべきか: 古いものを移行します
altool公証スクリプト。
- 実行する価値がある理由: Apple は次のことを行っています。
altoolNotary に使用されるパスは非推奨としてマークされており、新しいパフォーマンスと信頼性の向上には、次のパスに切り替える必要があります。notarytool。 - 開始方法: 倉庫を検索します
--notarize-appそして--notarization-info、送信とポーリングのロジックを次のように置き換えます。notarytool submit --wait。
関連セッション
- クラウド署名を使用して Xcode でアプリを配布する — Xcode 13 がクラウド署名を使用して署名、アーカイブ、配布をどのように簡素化するかについて説明します。
- Mac で TestFlight を紹介 — TestFlight を通じて macOS アプリケーションをテストおよび配布し、Xcode Cloud に接続する方法について説明します。
- Triage TestFlight crashes in Xcode Organizer — リリース前のテスト段階で Xcode Organizer でクラッシュとフィードバックを処理する方法について説明します。
- Xcode でのコードのレビューとコラボレーション — リリース パイプラインの先頭に配置するのに適した、Xcode でのコード レビューとコラボレーションのプロセスについて説明します。
コメント
GitHub Issues · utterances