WWDC Quick Look 💓 By SwiftGGTeam
What’s new in notarization for Mac apps

What’s new in notarization for Mac apps

元の動画を見る

ハイライト

Apple は、macOS アプリの公証のために 3 つの移行パスを提供しています。altool は 2023 年秋に公証に使用されなくなり、Xcode 14 は notarytool バックエンドに接続され、新しい Notary REST API は Linux などの CI 環境からの公証タスクの送信とクエリをサポートします。


主要内容

Mac App が App Store を通じて配布されていない場合、通常、開発者は開発者 ID に署名し、公証する必要があります。公証サービスはアップロードされたソフトウェアを分析し、ユーザーがサードパーティ ソフトウェアをダウンロードするときに macOS が悪意のあるコンテンツをブロックできるようにします。

これまで、このプロセスには 2 つの共通の問題点がありました。

まず、古いスクリプトがまだ呼び出し中ですaltool。チームは資格情報の管理、アップロード、結果の待機、およびエラー処理を行います。次に、CI マシンは Mac である必要はありません。たとえば、Linux ビルド ノードはアーカイブ ファイルを生成できますが、Xcode やnotarytool後続のプロセスを完了します。

このセッションでは、移行ルートが明確になりました。古い altool 公証と Xcode 13 UI アップロードは 2023 年の秋に機能を停止します。 Xcode 14 のグラフィックス プロセスは、同じ notarytool バックエンドのセットを使用します。新しい Notary REST API を使用すると、インターネットにアクセスできる任意のマシンでファイルの送信、ステータスのクエリ、履歴と詳細の取得が可能になります。


詳細

altool は終了しますが、notarytool は引き続き利用可能です

(01:11) 2021 年に Apple がリリースnotarytool、 としてaltool公証プロセスの代替手段。この 2022 年のセッションには期限があり、altool を使用した公証は 2023 年の秋に機能しなくなります。公証サービスへの Xcode 13 UI のアップロードも同じ期限後に停止されます。

notarytoolXcode 13 に組み込まれているバージョンを含め、引き続きネイティブに動作します。Apple は引き続き、最新の修正と改善を取得するためにアップグレードすることを推奨しています。

# 概念例: 古いスクリプトは altool から notarytool へ移行する必要があります
# 具体的な引数は、2021 年の “Faster and simpler notarization for Mac apps” とドキュメントを基準にしてください。

# before: xcrun altool ...
# after:  xcrun notarytool ...

キーポイント:

  • 最初の行は、これが移行プロンプトであり、このセッションで指定された完全なコマンドではないことを示しています。 -altool移動する必要がある古いパスです。 -notarytoolは、2023 年秋以降も引き続き使用できるコマンド ライン パスです。
  • 具体的な移行の詳細は、Apple が引用した WWDC 2021 セッションで詳しく説明されています。

Xcode 14 はグラフィックス プロセスを notarytool バックエンドに接続します

(02:30) チームが Xcode Organizer を使用して公証をアップロードすると、移行のストレスが軽減されます。 Xcode 14 の組み込み公証サポートは に移行され、notarytool同じバックエンドなので、Apple が 2021 年に提供するものを入手できますnotarytool約 4 倍のパフォーマンス向上を発表。

このパートの焦点は「ワークフローを変えない」ということです。この講演では、Xcode を更新する以外には、通常、プロジェクト設定や既存のプロセスを変更する必要がないことが明らかになりました。

Xcode 13 UI notarization  ->  stops working after fall 2023
Xcode 14 UI notarization  ->  uses the notarytool backend
notarytool CLI            ->  continues past the deadline

キーポイント:

  • Xcode 13 UI notarization期限を過ぎると機能しなくなる講義の古い UI アップロード方法に対応します。 -Xcode 14 UI notarization新しい Xcode 統合に対応します。 -notarytool backendこれが Xcode 14 のパフォーマンスが向上する理由です。 -notarytool CLI自動化スクリプトで使用できる移行ターゲットのままです。

Notary REST API: 最初に送信を作成してから、S3 にアップロードします

(03:01) 新しい Notary REST API がこのセッションの主役です。これは、他の App Store Connect API と同様に、JSON Web Token (JWT) 認証を使用する JSON Web サービスです。その目標は、macOS を実行していないマシンが公証サービスと対話できるようにすることです。

アップロードは 2 段階のプロセスです。最初のステップは、ファイル名と SHA-256 を Notary API に送信することです。サービスは、一時的な S3 認証情報、バケット、オブジェクト、およびsubmission_id。 2 番目のステップは、S3 SDK を使用して、Apple が提供する場所にファイルをアップロードすることです。

# Upload file for notarization

def upload_file(token, filepath, sha256):
    data = { "sha256": sha256, "submissionName": os.path.basename(filepath) }
    resp = requests.post(
       "https://appstoreconnect.apple.com/notary/v2/submissions",
        json=data,
        headers={"Authorization": "Bearer " + token})

    output = resp.json()
    aws_info = output["data"]["attributes"]
    submission_id = output["data"]["id"] 

    client = boto3.client(
        "s3",  
        aws_access_key_id=aws_info["awsAccessKeyId"],
        aws_secret_access_key=aws_info["awsSecretAccessKey"],
        aws_session_token=aws_info["awsSessionToken"])
    client.upload_file(filepath, aws_info["bucket"], aws_info["object"])

キーポイント:

  • upload_file(token, filepath, sha256)JWT、ファイルパス、ファイルハッシュを入力として受け取ります。 -dataスピーチで言及された基本的なファイル情報 (SHA-256 とコミット名) のみが含まれます。 -requests.post(...)Notary REST API の送信エンドポイントを呼び出します。 -Authorization: Bearer ...JWT認証を使用します。 -aws_info一時的な S3 アップロード情報を応答に保存します。 -submission_idこれは、その後の公証ステータスの照会のための ID です。 -boto3.client("s3", ...)返された一時認証情報を使用して S3 クライアントを作成します。 -client.upload_file(...)応答で指定されたバケットとオブジェクトにファイルをアップロードします。

このコードは、REST API の境界も示しています。Notary API はファイル全体を直接受信しません。まず送信を作成してアップロード情報を返し、次にファイルのコンテンツが Amazon S3 に送信されます。

クエリのステータス: 「進行中」が最終結果になるのを待機中

(06:12) アップロード後、配布前に公証人サービスが提出物を処理したことを確認してください。 REST API を直接使用する方法は、次のとおりです。submission_idステータスを問い合わせます。ステータスは残りますIn Progress処理が完了して最終状態になるまで、たとえばAcceptedまたはInvalid

# Wait for completion

def watch_upload(submission_id, token):
    while True:
        resp = requests.get(
            "https://appstoreconnect.apple.com/notary/v2/submissions/" + submission_id, 
            headers={"Authorization": "Bearer " + token})

        output = resp.json()
        current_status = output["data"]["attributes"]["status"]
        
        if current_status != "In Progress":
            return current_status # For example: Accepted or Invalid

        time.sleep(30) # Allow time for submission to progress

キーポイント:

  • watch_upload(submission_id, token)アップロード段階で取得した提出 ID を使用して、同じ提出の追跡を続けます。 -requests.get(...)単一の送信のために Notary API エンドポイントにアクセスします。 -Authorizationヘッダーは同じ JWT 認証方法を引き続き使用します。 -current_status応答で現在の処理ステータスを読み取ります。 -current_status != "In Progress"公証役場が最終結果を出したことを示します。 -AcceptedそしてInvalidスピーチでリストされている最終状態の例です。 -time.sleep(30)永続的なリクエストは避けてください。スピーチの例では、送信が進むまで 30 秒待機します。

講演では、提出完了後、このアップロードの公証ログは API を通じて取得できるとも付け加えた。特定のエンドポイントについては、Notary API ドキュメントを参照してください。

Webhook: アップロード システムをその後の自動化から切り離す

(06:49) ポーリングが唯一のオプションではありません。 Notary REST API は Webhook ワークフローもサポートしています。Webhook URL は最初のアップロード リクエストで提供されます。自動分析が完了し、チケットが作成され、最終ステータスが保存された後、公証人サービスはこの URL を呼び出します。

演説では、通知には以下の内容が含まれていることを明確に述べています。submission IDteam ID通知が Apple からのものであることを証明する署名。

upload request includes webhook URL


notary service analyzes submission


tickets are created and final status is saved


notary service calls webhook URL

        ├─ submission ID
        ├─ team ID
        └─ signature

キーポイント:

  • webhook URL最初のアップロード要求で指定されたコールバック アドレスです。 -analyzes submissionアップロードされた文書の公証人サービスの自動分析に対応します。 -tickets are created音声の分析が完了した後にチケットを作成する手順に相当します。 -final status is savedサーバーが最終的な公証ステータスに達したことを示します。 -submission IDそしてteam ID受信者にどのコミットとどのチームを知らせます。 -signature通知のソースを確認するために使用されます。

CI/CDに適したモデルです。アップロード マシンはファイルの送信のみを行います。別のシステムが Webhook を受信すると、送信者に通知するか、自動配布プロセスを開始できます。どちらの部分も同じプロセスを使用して待機する必要はありません。


重要ポイント

  • 何をすべきか: 蒸留器を使用します。altoolCI スクリプトがリストされ、次の場所に移行されます。notarytoolまたは公証人 REST API。
    実行する価値がある理由: altool の公証は 2023 年の秋に機能しなくなります。移行は厳しい期限です。
    開始方法: まず、altool呼び出し、macOS を実行するかどうかをクリックして選択しますnotarytoolまたはREST API。

  • 何をすべきか: Linux ビルド ノードに公証されたアップロード ステップを追加します。
    価値がある理由: REST API はインターネットに接続された任意のマシンからの送信をサポートしており、Mac 上でアップロード手順を実行する必要がなくなりました。
    開始方法: JWT で呼び出しますPOST https://appstoreconnect.apple.com/notary/v2/submissions, S3 情報を取得したら、既存の言語で S3 SDK を使用してファイルをアップロードします。

  • 作業内容: 公証結果に対する Webhook コールバック サービスを作成します。
    実行する価値がある理由: Webhook を使用すると、アップロード プロセスを後続の通知および配布プロセスから分離できるため、長期にわたるポーリング タスクが削減されます。
    開始方法: 最初の送信リクエストで Webhook URL を構成します。通知を受け取った後に署名を検証し、submission ID後続のアクションをクエリまたはトリガーします。

  • 何をすべきか: 公証ステータスとログを内部公開パネルに接続します。
    価値がある理由: REST API は、送信ステータス、履歴、送信詳細、公証ログのクエリをサポートしているため、パブリッシャーは CI コンソールを見るだけで済みません。
    開始方法: 各アップロードから返されたデータを保存しますsubmission_id、Notary API を定期的にまたはオンデマンドで呼び出して、ステータスを表示し、リンクをログに記録します。


関連セッション

コメント

GitHub Issues · utterances