WWDC Quick Look 💓 By SwiftGGTeam
Distribute apps in Xcode with cloud signing

Distribute apps in Xcode with cloud signing

元の動画を見る

ハイライト

Xcode 13 では、App Store Connect のアップロード、アプリケーション レコードの作成、ビルド番号管理、クラウド署名が同じ配布プロセスに組み込まれるため、開発者はネイティブ証明書の構成なしでアプリケーションの配布を完了できます。

主要内容

アプリケーションを作成した後、通常、次のステップが最も面倒な部分です。

TestFlight でテストする前に、ビルドを App Store Connect にアップロードする必要があります。初めてアップロードする前に、App Store Connect でアプリレコードを作成する必要があります。このマシンでも配布証明書と秘密鍵を準備する必要があります。チームがマシンを変更すると、証明書と秘密キーが追加の構成になります。

このセッションでは、Baker という iOS アプリを使用して、完全なプロセスをデモンストレーションします。開発者は最初のビルドを完了し、それを TestFlight テスターに​​引き渡したいと考えています。以前は、これは Xcode、Native Keychain、App Store Connect 全体で発生していました。 Xcode 13 では、これらの手順がオーガナイザーの配布ウィザードに組み込まれています。

最初のアップロード: Xcode がアプリケーション レコードを直接作成します

Baker が初めて App Store Connect にアップロードしたとき、アプリ レコードはまだありませんでした。 Xcode 13 では、アップロード プロセス中にアプリ レコードを作成するように求められ、アーカイブおよびシステム設定からのデフォルト値 (アプリ名、バンドル ID、主言語など) を入力します。

一度作成されると、Baker の後続のビルドはすべて同じアプリケーション レコードに入ります。そこで開発者は、TestFlight、App Store、アプリ内購入、価格情報を設定できます。

署名: 秘密キーをローカル マシンに置く必要がなくなりました。

署名は、アプリケーションが信頼できる開発者からのものであることを証明するために使用されます。以前は、自動署名を使用する場合でも、証明書と秘密キーをマシン上に配布する必要がありました。 Xcode 13 ではクラウド署名が導入されています。証明書と秘密キーはクラウドに安全に保存でき、署名操作はクラウドで完了します。

Xcode は、アーカイブ内の開発者が署名したアプリから部分署名を生成し、アプリケーション コンテンツのハッシュをサーバーに送信します。サーバーは秘密キーと証明書を使用して署名を完了し、残りの署名を Xcode に返します。最終的な IPA は App Store Connect にアップロードできます。

後続のアップロード: 管理のためにビルド番号を Xcode に渡すことができます

App Store Connect は、バージョン番号とビルド番号を使用して各アップロードを区別します。 Baker を 2 回目にアップロードするときは、アプリケーション レコードはすでに存在しますが、ビルド番号は有効である必要があります。

Xcode 13 は、ビルド番号がすでに使用されているか、増分されていないかを検出します。問題が見つかった場合、配布プロセスによって有効なビルド番号が提供されます。開発者は、[バージョンとビルド番号の管理] オプションで Xcode によって選択された値を確認できます。

詳細

アーカイブは配信への入り口

(02:42) Xcodeの配布はアーカイブから始まります。アーカイブは、アプリケーションおよびチーム関連のメタデータを含む、開発者が署名したリリース ビルドです。

Run Destination: Any iOS Device
Menu: Product > Archive
Organizer: Archives > Distribute App
Distribution Method: App Store Connect
Action: Upload

キーポイント:

  • Any iOS Device: ユニバーサル iOS デバイス ターゲットを選択して、ビルドがサポートされている iOS デバイスをターゲットにしていることを確認します。
  • Product > Archive: 配布用のリリース アーカイブ パッケージを生成します。
  • Organizer:アーカイブが完了すると自動的に開き、バージョン、バンドルID、チーム名などの情報が表示されます。
  • Distribute App: 配布ウィザードを開始します。
  • App Store Connect: TestFlight または App Store で使用するために、ビルドを App Store Connect に送信します。
  • Upload: Xcode が署名して IPA を生成し、App Store Connect にアップロードします。

Xcode 13 は App Store Connect アプリレコードを作成できます

(05:20) 初めて Baker をアップロードすると、Xcode は App Store Connect ステータスをチェックし、アプリ レコードを作成するように求めます。このレコードは、TestFlight、App Store、アプリ内購入、および価格情報がその後管理される場所です。

App Record Creation
- app name: derived from archive
- bundle ID: derived from archive
- primary language: derived from system settings

Available after creation:
- TestFlight builds
- App Store builds
- in-app purchases
- pricing information

キーポイント:

  • app name:Xcode は、デフォルトのアプリ名をアーカイブ パッケージから取得します。
  • bundle ID: Xcode はアーカイブからバンドル ID を読み取り、それを使用してアプリ ID と照合します。
  • primary language:Xcode はシステム設定から主言語を推測します。
  • TestFlight builds: アプリ レコードが作成された後、アップロードされたビルドは TestFlight プロセスに入ることができます。
  • in-app purchases: 同じアプリ レコードは、アプリ内購入構成もホストします。

クラウド署名によりローカル証明書構成が削除される

(07:27) Xcode 13 の自動署名ではクラウド署名を使用できます。証明書と秘密キーはクラウドに保存され、Xcode が部分的な署名を生成し、サーバーが残りを完成させます。

Archive app
  -> generate partial signature
  -> send content hashes to Apple servers
  -> sign with cloud-managed certificate and private key
  -> return remaining signature
  -> complete distribution-signed app

キーポイント:

  • Archive app: 入力は、アーカイブ パッケージ内の開発者署名アプリケーションです。
  • partial signature: Xcode は部分署名をネイティブに生成します。
  • content hashes: サーバーに送信されるのは、アプリケーション コンテンツのハッシュです。
  • cloud-managed certificate and private key: サーバーはクラウドで管理されている証明書と秘密鍵を使用して署名を完了します。
  • remaining signature: サーバーは残りの署名を返し、Xcode はそれを部分署名に挿入します。
  • distribution-signed app: 結果として、App Store Connect にアップロードできる配布署名付きアプリが得られます。

(09:23) 権限にも明確なルールがあります。クラウド署名は、App Store Connect 管理者とアカウント所有者がデフォルトで利用できます。開発者ロールには、クラウド ホスティング配布証明書のアクセス許可が付与される必要があります。

Cloud signing permission
- Admin: allowed by default
- Account Holder: allowed by default
- Developer: requires "Access to Cloud Managed Distribution Certificate"

キーポイント:

  • Admin: App Store Connect のディストリビューションでは、クラウド署名がデフォルトで利用可能です。
  • Account Holder:デフォルトでクラウド署名を使用できます。
  • Developer: 追加の権限が必要です。
  • Access to Cloud Managed Distribution Certificate: これは、開発者ロールがクラウド署名を使用できるようにする権限スイッチです。

ビルド番号管理により、アップロードの繰り返しの失敗が減少します

(10:47) Baker が 2 回目にアップロードされると、アプリケーション レコードが作成され、プロセスのステップが 1 つ減ります。ただし、App Store Connect はバージョン番号とビルド番号を使用して各ビルドを区別します。ビルド番号が重複している場合、または増分されていない場合、アップロード プロセスはブロックされます。

Manage Version and Build Number
- detects build number already used on App Store Connect
- detects build number not incrementing
- offers a valid build number in the archive

キーポイント:

  • already used:Xcode はビルド番号がアップロードされているかどうかを確認します。
  • not incrementing:Xcode は、ビルド番号が増加していないかどうかを確認します。
  • valid build number注:配布プロセスでは、アーカイブ パッケージに有効なビルド番号を提供できます。
  • archive: この変更は配布アーカイブで行われます。

Mac ディストリビューション: 開発者 ID 付きの Mac App Store

(13:11) ほとんどの iOS アプリは、デフォルトで Apple Silicon Mac 上で実行できます。 Intel Mac をサポートしたい場合は、Mac Catalyst バージョンまたはネイティブ Mac バージョンを作成できます。 Mac アプリには主に 2 つの配布パスがあります。

Mac distribution options
- Mac App Store: cloud signing, App Store Connect upload
- Developer ID: cloud signing, notarization, outside Mac App Store

キーポイント:

  • Mac App Store: このプロセスは iOS のアップロードと似ており、クラウド署名と App Store Connect への配布を使用します。
  • same bundle ID: Mac アプリと iOS アプリが同じバンドル ID を使用する場合、同じアプリ レコードが使用されます。
  • in-app purchases: 同じアプリケーション レコードは、特定の機能をプラットフォーム間で共有できることを意味します。
  • Developer ID: Mac App Store 以外での配布に適しています。
  • notarization: 開発者 ID の配布により、悪意のあるコンテンツをチェックするためにアプリケーションがアップロードされ、完了後、macOS はアプリケーションを信頼します。

iOS 向けのアドホック、カスタム アプリ、およびエンタープライズ

(15:13) 開発者は、修正ビルドをチームメイトに直接送信したり、社内アプリケーションを会社メンバーに送信したりしたい場合があります。 Xcode は依然としてこれらの配布方法を保持しています。

iOS distribution options
- Ad Hoc: run on up to 100 registered devices per device type
- Custom Apps: distribute through App Store Connect
- Enterprise: distribute privately through the enterprise program

キーポイント:

  • Ad Hoc: 配布署名ビルドをチーム メンバーに送信するために使用されます。デバイスはチームに登録する必要があります。
  • 100 registered devices per device type: アドホックのデバイス制限はデバイスの種類によって計算されます。
  • Custom Apps: まず App Store Connect に配布し、そこでカスタム アプリを構成します。
  • Enterprise: Enterprise プランでのプライベート配布の場合は、Organizer でエンタープライズ配布方法を選択します。

xcodebuild を使用して配布を自動化する

(17:18) チームが継続的統合サービスを使用している場合、配布プロセスをコマンド ラインに引き渡すことができます。 Xcode へのエントリ ポイントは次のとおりです。xcodebuild -exportArchive。アーカイブ パッケージ、エクスポート オプション plist、および認証情報が必要です。

xcodebuild -exportArchive \
  -archivePath "/path/to/Baker.xcarchive" \
  -exportOptionsPlist "/path/to/ExportOptions.plist" \
  -allowProvisioningUpdates \
  -authenticationKeyIssuerID "$ISSUER_ID" \
  -authenticationKeyID "$KEY_ID" \
  -authenticationKeyPath "/path/to/AuthKey.p8"

キーポイント:

  • xcodebuild -exportArchive: 自動配信用のコマンド。
  • -archivePath: ビルドされたアーカイブ パッケージのパスを渡します。
  • -exportOptionsPlist: エクスポート オプションの plist、レコードのアップロード、ビットコード、自動署名、その他の配布オプションを渡します。
  • -allowProvisioningUpdates:xcodebuild が Apple Developer Web サイトと通信できるようにします。
  • -authenticationKeyIssuerID: App Store Connect API キーの発行者 ID を渡します。
  • -authenticationKeyID: App Store Connect API キーのキー ID を渡します。
  • -authenticationKeyPath: ダウンロードした API キー ファイルのパスを渡します。

(19:13) 認証情報には 2 つの方法があります。 1 つ目は、最初に Xcode にログインし、コマンド ラインが一定期間セッションを再利用することです。 2 つ目は、Xcode へのログインを必要としない App Store Connect キーを使用する方法です。

xcodebuild credentials
- signed in to Xcode + -allowProvisioningUpdates
- App Store Connect keys + -allowProvisioningUpdates

キーポイント:

  • signed in to Xcode: ネイティブ オートメーションに適しており、ログイン セッションは一定期間保持されます。
  • App Store Connect keys: CI 環境に適しており、Xcode にログインするためのグラフィカル インターフェイスは必要ありません。
  • -allowProvisioningUpdates: xcodebuild は依然として開発者の Web サイトにアクセスする必要があるため、両方のメソッドが必要です。

重要ポイント

TestFlight ビルドを毎週自動的に送信する

  • やるべきこと: master ブランチの安定したビルドを毎週 App Store Connect にアップロードし、TestFlight テスターに​​渡します。
  • *なぜそれを行う価値があるのか​​: セッションは明確に与えられますxcodebuild -exportArchive、エクスポート オプション plist および App Store Connect キーは、自動化された入り口のセットです。
  • 開始方法: まず、Xcode で IPA を手動でエクスポートし、生​​成された ExportOptions.plist を保存します。それからxcodebuild -exportArchiveCIに入れて使う-authenticationKeyIssuerID-authenticationKeyID-authenticationKeyPath資格情報を提供します。

チームメンバーに一時的な修復パッケージを送信する

  • 対処方法: 緊急のバグ修正用のアドホック ビルドを生成し、検証用にデバイスを登録している同僚に直接送信します。
  • 価値がある理由: アドホック配布は、デバイス タイプごとに最大 100 台の登録デバイスをサポートしており、小規模な検証に適しています。
  • 開始方法: オーガナイザーの配布アプリで [アドホック] を選択し、IPA をエクスポートし、デバイスがチームに登録されているテスト メンバーにビルドを送信します。

App Store 以外で Mac アプリを配布する

  • 対処方法: Mac ユーティリティ アプリケーションのダウンロードおよびインストール パッケージを公式 Web サイトから提供します。
  • 実行する価値がある理由: 開発者 ID の配布ではクラウド署名と公証が実行され、完了すると、macOS はアプリケーションの実行を信頼します。
  • 開始方法: Xcode Organizer で開発者 ID 配布方法を選択し、署名と公証を完了します。より詳細な公証の詳細が必要な場合は、引き続き「Mac アプリの高速かつシンプルな公証」を参照してください。

管理者以外の開発者もアップロードに参加できるようにする

  • 内容: 開発者ロールのメンバーが秘密キー ファイルに触れることなくビルドをアップロードできるようにします。
  • 実行する価値がある理由: クラウド署名は証明書と秘密キーをクラウドに置き、開発者のロールを付与するだけで済みます。Access to Cloud Managed Distribution Certificate
  • 開始方法: App Store Connect でチームの役割を確認し、アップロードする必要がある開発者メンバーのクラウド ホスト型ディストリビューション証明書のアクセス許可をオンにして、Xcode の自動署名付きディストリビューションを使用できるようにします。

Mac と iOS のアプリ レコードの共有

  • 内容: iOS アプリと Mac Catalyst アプリが同じバンドル ID を使用して App Store Connect アプリ レコードを共有できるようにします。
  • 実行する価値がある理由: セッションで言及された同じバンドル ID を持つ Mac アプリは、iOS バージョンと同じアプリ レコードを使用し、アプリ内購入などの一部の機能を共有できます。
  • 開始方法: Mac Catalyst またはネイティブ Mac バージョンを既存の iOS アプリに追加し、同じバンドル ID を使用するかどうかを評価し、Mac App Store パスを通じてアップロードします。

関連セッション

コメント

GitHub Issues · utterances