WWDC Quick Look 💓 By SwiftGGTeam
What's new in App Store Connect

What's new in App Store Connect

元の動画を見る

ハイライト

Apple は、900 の新しい価格帯、TestFlight 内部ビルド タグ、サンドボックス ファミリー共有テスト、地域別の事前注文、App Store Connect での Game Center API サポートを追加し、開発者が価格設定からテスト、発売までのプロセス全体をより詳細に制御できるようになりました。

主な内容

アプリ内購入と価格設定

以前は、アプリ内購入 (IAP) を行うには、ローカリゼーション、アクセシビリティ、さまざまなプラットフォームへの適応に対処するだけでなく、大量の UI コードを記述する必要がありました。開発者は多くの場合、購入インターフェイスに数日の作業を費やします。

Apple は今年、SwiftUI 用の StoreKit をリリースしました。App Store Connect で製品を構成した後、Xcode に戻って、わずか数行のコードで完全な購入インターフェイスを生成できます。このインターフェイスは、すべての App Store 言語とシステム アクセシビリティ機能を自動的にサポートします。

最もシンプルなバージョンを使用してすぐにオンラインにアクセスすることも、背景、ボタン、スタイルをカスタマイズして購入ページをアプリのスタイルと統一することもできます。App Store で IAP を宣伝する場合は、プロモーション アイコンを直接呼び出して購入ページに表示することもできます。

01:11

価格の面では、Appleは今年、当初の選択肢を900の価格帯に拡大した。開発者は次のことができます。

  • 基本地域を選択し、他の地域や通貨の価格を自動的に変換します
  • App Storeで為替レートや税率の変更に基づいて国際価格を自動的に調整するか、手動で管理するかを選択します
  • リージョンごとに IAP とサブスクリプションの利用可能性を設定します

02:09

TestFlight テスト管理

テスターの管理は常に課題でした。TestFlight はテスト パッケージを配布できますが、開発者にとって、どのテスターが実際にテストに参加し、どのくらいのクラッシュが発生し、どのくらいのフィードバックを提供したかを判断するのは困難です。

今年、TestFlight には新しいデバイス列が追加され、テスターが最後にインストールしたテスト パッケージのデバイスとシステムのバージョンが表示されます。テスト データでフィルターし、テスターを一括で選択して、再招待、グループへの追加、または削除を行うことができます。このデータはすべて、App Store Connect API を通じて利用できます。

03:59

さらに重要なのは、流通制御を構築することです。Xcode からビルドを配布する場合、ビルドを「TestFlight Internal Only」としてマークできます。フラグが設定されたビルドは外部の TestFlight に入力されず、App Store のレビューに送信できません。App Store Connect では、プロトタイプ コードの偶発的な漏洩を避けるために、これらのビルドは明確に識別されます。

04:41

Xcode Cloud には、TestFlight の「何をテストするか」の自動アップロードも追加されています。TestFlight フォルダーをプロジェクトと同じディレクトリに配置し、その中にテスト ポイントのプレーン テキスト リストを書き込むことができます。または、カスタム ビルド スクリプトを作成して、コミット メッセージからテスト指示を抽出します。この情報は自動的に App Store Connect に同期され、テスターに​​配布されます。

05:12

サンドボックステストの機能強化

ファミリー共有を使用すると、ユーザーはサブスクリプションと IAP を家族と共有できますが、この機能は以前はサンドボックス環境でのテストには使用できませんでした。

今年 Apple は、テスト アカウントをサンドボックス内で最大 6 つのアカウントのホームグループに結合できるようにします。iOS デバイスでは、サンドボックス テスターは次のことができるようになりました。

  • 家族のメンバーを表示し、自動更新可能なサブスクリプションまたは非消耗アイテムの共有を停止します
  • サブスクリプション更新率を変更する
  • 購入フローの中断テスト
  • デバイス上で購入履歴を直接消去します

05:59

製品ページとプライバシー

xrOS の導入により、新しいプライベート データ型が導入されました。アプリがユーザーの周囲の環境に関するデータを収集する場合は、プライバシー タブで [環境スキャン] を選択する必要があります。 「手」を選択して手の構造や動きを収集します。頭の動きを収集するには「頭」を選択します。これらのタグは、ARKit を使用する iOS アプリを含む、すべてのプラットフォームの App Store に表示されます。

07:34

事前注文機能が地域別のオープンに対応しました。一部の地域で正式に発売 (ソフトローンチ) し、同時に他の地域で予約注文を開始することもできます。これは、再設計された可用性ページを通じて管理されます。

製品ページ最適化テスト (A/B テスト) も改善されました。テストは手動で停止するまで実行され、新しいバージョンのリリースの影響を受けなくなりました。更新をプッシュしている間、実行中のテストを監視できます。

08:37

App Store Connect API 拡張機能

今年、この API には、IAP とサブスクリプションの管理、顧客レビューの回答、サンドボックス テスターの管理が追加されます。今後の Game Center API サポート:

  • リーダーボードと実績を作成、設定、アーカイブする
  • サーバー間 API 経由でスコアと実績のロック解除イベントを送信します
  • 不正行為を自動的に処理するためにリーダーボードからスコアとプレイヤーを削除します
  • スキルレベルや地域などのカスタムルールでプレイヤーをマッチングします

API 認定も更新されます。マーケティングと顧客サービスに固有の API キーを生成し、マーケティング メタデータの管理やコメントへの返信に限定できます。App Store Connect でのロールと一致する権限を持つユーザーベースのキーを作成することもできます。

10:24

##詳細

StoreKit for SwiftUI の使用方法

StoreKit for SwiftUI の中核には、次の 2 つのビューがあります。StoreViewそしてSubscriptionStoreView

import StoreKit
import SwiftUI

struct ContentView: View {
    var body: some View {
        // 展示所有可用的 IAP 产品
        StoreView(ids: ["premium_monthly", "premium_yearly"])
        
        // 展示订阅选项
        SubscriptionStoreView(groupID: "premium_group")
    }
}

キーポイント:

  • StoreView(ids:)App Store Connectで構成された製品のIDリストを渡します
  • SubscriptionStoreView(groupID:)サブスクリプション グループの ID を渡します
  • これら 2 つのビューは、製品の読み込み、ローカリゼーション、アクセシビリティ、購入プロセスを自動的に処理します。
  • 手動で電話をかける必要はありませんSKProductsRequestまたはトランザクション ステート マシンを処理します

カスタム スタイルの例:

SubscriptionStoreView(groupID: "premium_group") {
    VStack {
        Image("app_icon")
            .resizable()
            .frame(width: 80, height: 80)
        Text("升级至高级版")
            .font(.title)
    }
}
.storeButton(.visible, for: .restorePurchases)
.subscriptionStoreButtonLabel(.multiline)

キーポイント:

  • クロージャの上部コンテンツ領域をカスタマイズします
  • .storeButton(.visible, for: .restorePurchases)購入を復元ボタンを表示
  • .subscriptionStoreButtonLabel(.multiline)購読ボタンに複数行の情報を表示する

TestFlight「何をテストするか」のファイル構造

Xcode プロジェクトまたはワークスペースの兄弟ディレクトリにフォルダー構造を作成します。

MyApp/
├── MyApp.xcodeproj
├── MyApp/
│   └── ...
└── TestFlight/
    └── WhatToTest.en-US.txt
    └── WhatToTest.zh-Hans.txt

キーポイント:

  • TestFlight/フォルダーは次のとおりである必要があります.xcodeprojまたは.xcworkspace同レベル
  • ファイル名の形式は次のとおりです。WhatToTest.{locale}.txt
  • すべての App Store 言語ロケールをサポート
  • Xcode Cloud はビルド時に自動的に読み取り、App Store Connect にアップロードします

または、ビルド スクリプトを使用して git ログから抽出します。

#!/bin/bash
# 放在 Xcode Cloud 的 ci_post_xcodebuild.sh 中
COMMITS=$(git log --pretty=format:"- %s" $CI_PREVIOUS_SUCCESSFUL_COMMIT..HEAD)
echo "$COMMITS" > "$CI_ARCHIVE_PATH/WhatToTest.txt"

キーポイント:

  • ci_post_xcodebuild.shXcode Cloudのビルド後のフックスクリプトです
  • $CI_PREVIOUS_SUCCESSFUL_COMMIT最後に成功したビルドのコミット ハッシュです
  • に出力します$CI_ARCHIVE_PATHWhatToTest.txtXcode Cloudによって認識されます

App Store Connect API の新しいエンドポイント

Game Center API の例 (JWT 認証を使用):

# 创建排行榜
JWT_TOKEN=$(generate_jwt)

curl -X POST \
  https://api.appstoreconnect.apple.com/v1/gameCenterLeaderboards \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": {
      "type": "gameCenterLeaderboards",
      "attributes": {
        "referenceName": "Weekly High Score",
        "vendorIdentifier": "weekly_high_score",
        "defaultSortOrder": "DESCENDING",
        "scoreFormatType": "INTEGER"
      },
      "relationships": {
        "gameCenterGroup": {
          "data": {
            "type": "gameCenterGroups",
            "id": "GROUP_ID"
          }
        }
      }
    }
  }'

キーポイント: ・App Store Connect APIを利用したJWT認証方式

  • referenceNameリーダーボードの表示名です
  • vendorIdentifierコード内で参照する ID です
  • defaultSortOrderできるDESCENDINGまたはASCENDING
  • scoreFormatTypeサポートINTEGERFLOATなどの形式

サーバー間の送信スコア:

curl -X POST \
  https://api.appstoreconnect.apple.com/v1/gameCenterLeaderboardEntries \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": {
      "type": "gameCenterLeaderboardEntries",
      "attributes": {
        "score": 15000,
        "playerId": "PLAYER_ID",
        "context": 1
      },
      "relationships": {
        "gameCenterLeaderboard": {
          "data": {
            "type": "gameCenterLeaderboards",
            "id": "LEADERBOARD_ID"
          }
        }
      }
    }
  }'

キーポイント:

  • playerIdGame Center プレーヤーの一意の識別子です
  • contextレベル番号などの情報を保存するために使用できるオプションの追加データです。
  • クロスプラットフォーム ゲームに適しており、サーバー側でスコアを均一に送信します

重要ポイント

1. StoreKit for SwiftUI を使用してカスタム購入ページを置き換えます

  • やるべきこと: 既存の IAP 購入プロセスを手動から移行します。SKProductsRequest+ カスタム UI を StoreKit for SwiftUI に移行
  • 価値がある理由: 数百行の UI および状態管理コードを数行のコードに置き換え、ローカリゼーション、アクセシビリティ、システム スタイルを自動的に取得します。
  • 開始方法: App Store Connect で製品を設定し、SwiftUI ビューで使用しますStoreViewまたはSubscriptionStoreView、古いコードを徐々に置き換えます

2. TestFlight 自動テスト ワークフローを確立する

  • やるべきこと: Xcode Cloud を使用して、コミット メッセージを「テスト対象」コンテンツとして自動的に抽出し、内部専用タグを使用してビルド配布を管理します。
  • 実行する価値がある理由: テスターはビルドを受け取るたびにこの変更のキーポイントを確認できるため、内部プロトタイプが誤って漏洩することはありません
  • 開始方法: プロジェクトに追加しますTestFlight/WhatToTest.en-US.txt、Xcode Cloud の設定ci_post_xcodebuild.shgitログを抽出するスクリプト

3.サンドボックス ファミリー共有を使用してサブスクリプション共有をテストします

  • やるべきこと: App Store Connect で 2 ~ 6 個のサンドボックス テスト アカウントを作成し、ファミリー グループを形成し、サブスクリプション共有の完全なプロセスをテストします。
  • 実行する価値がある理由: ファミリー共有は、定期購入アプリにとって重要なコンバージョン チャネルです。以前はテストできませんでしたが、リリース前に検証できるようになりました。
  • 開始方法: App Store の [接続] > [ユーザーとアクセス] > [サンドボックス テスター] でアカウントを作成し、ホームグループを構成し、デバイス上の別のアカウントにログインしてテストします。

4. Game Center API を使用してクロスプラットフォーム ランキングを実装します

  • 内容: サーバー間 API を介してゲーム バックエンド サーバーからスコアと実績を送信します。
  • 実行する価値がある理由: クロスプラットフォーム ゲーム (iOS バージョンと Web バージョンの両方があるなど) では、Game Center データをサーバー側で均一に管理できます。
  • 開始方法: App Store Connect で API キーを生成し、JWT 認証を使用して Game Center エンドポイントを呼び出してランキングを作成し、スコア送信ロジックをゲーム サーバーに統合します

5.地域ごとの段階的リリース

  • やるべきこと: コア市場で正式に発売してフィードバックを収集し、同時に他の市場でも予約注文を開始します
  • 実行する価値がある理由: 世界同時リリースのリスクを軽減し、市場を拡大する前に実際のユーザー データを使用して製品を最適化します。
  • 開始方法: App Store Connect の利用可能ページで、一部の領域を「ダウンロード可能」として選択し、その他の領域を「予約注文」として選択します。

関連セッション

コメント

GitHub Issues · utterances