iOS 向けデベロッパー デバイス プラットフォーム デバイス実行

このガイドでは、gcloud alpha device-run CLI を使用して iOS XCTest を実行し、 Google Cloud コンソールで結果を確認する方法について説明します。Google Cloud アカウントとプロジェクトがあることを前提としています。

Firebase Test Lab から Developer Device Platform に移行する場合は、移行ガイド、コマンドとフラグの変換、AI エージェントの移行スキルをご覧ください。

device-run CLI を使用するには、 Google Cloudプロジェクト ID を指定する必要があります。コマンドの概要については、gcloud alpha device-run をご覧ください。

始める前に

以下の手順は、すでに次の処理が行われていることを前提としています。

  1. Google Cloud プロジェクトを作成済みであること。
  2. クイックスタートに沿って Developer Device Platform を設定します。
  3. ターミナルで gcloud を使用して認証されている。
  4. 一般的な情報については、デバイスランの概要を確認しました。
  5. テストをコンパイルして ZIP にパッケージ化している。

ステップ 1. テスト実行を構成する

次のオプション フラグを使用して、テスト実行をカスタマイズできます(ただし、--device フラグのインスタンスが少なくとも 1 つ必要です)。

  • 複数のデバイス: --device フラグを複数回指定して、複数のデバイスで同時に同じテストを実行します。--device iphonese3-18-4 --device iphonese3-26-3 または --device iphonese3-18-4,iphonese3-26-3
  • 追加のアプリ: --additional-apps を使用してテストを起動する前に、1 つ以上の追加の .ipa パッケージをインストールします。 --additional-apps=/path/to/AdditionalApp.ipa
  • カスタム .xctestrun ファイル: --xctestrun-file を使用してカスタム構成ファイルを渡します。--xctestrun-file=/path/to/CustomTests.xctestrun
  • Apple Xcode のバージョン: CLI でサポートされている Xcode のバージョンに --xcode-version フラグを使用して直接アクセスします。例: --xcode-version=xcode-16-4
  • テスト タイムアウト: 実行時間を制限します。--xctest-timeout=10m(有効な範囲は 1m~1h、デフォルトは 5m)。
  • ラベル: ユーザー定義のメタデータをセッションにアタッチします。 --labels=env=staging,owner=my-team
  • 言語 / 地域: デバイスの言語 / 地域を設定します。--locale=en-US
  • ファイルをデバイスに push する: テスト実行前にファイルをアプリデータ コンテナに push します。 --other-files-to-push=/tmp/data.txt=com.example.app:/Documents/data.txt
  • デバイスからファイルを取得: テスト実行後にアプリデータ コンテナからファイルを取得します。--paths-to-pull=com.example.app:/Documents/output.txt
  • フレーキー テストの再試行: フレーキー テストを再実行する最大試行回数を設定します。--flaky-test-attempts=3(デフォルトは 1 回)。
  • カスタム Cloud Storage バケット: 入力と出力にカスタム Cloud Storage バケットを指定します。--bucket-name=my-custom-bucket(デフォルトは PROJECT_ID-devicerun)。
  • サイズの大きい ZIP ファイルや IPA ファイルのアップロードには時間がかかることがあるため、Cloud Storage の gs:// パスを使用してファイルを直接参照することで、アップロード時間を短縮できます。

同期実行と非同期実行

デフォルトでは、送信コマンドはブロッキング(同期)です。テストが完了するまで待機し、結果の概要テーブルを出力します。

セッションを送信し、ファイルを Cloud Storage にアップロードした直後に戻るには、--async フラグを追加します。

gcloud alpha device-run sessions submit xctest \
  --device iphonese3-18-4 \
  --test ./IOS_TESTS.zip \
  --async

これにより、セッション ID がすぐに返されます。sessions wait コマンドを使用して待機できます。

gcloud alpha device-run sessions wait SESSION_ID

このコマンドは、ジョブが完了するまでブロックされます。

複数のデバイス

複数のデバイスで同じテストを実行するには、--device フラグに複数のデバイス ID をカンマ区切りで指定するか、それぞれ異なるデバイス ID を指定する複数の --device フラグを指定します。

カンマ区切り

gcloud alpha device-run sessions submit xctest \
  --device iphonese3-18-4,iphonese3-26-3 \
  --test ./IOS_TESTS.zip

複数のフラグ

gcloud alpha device-run sessions submit xctest \
  --device iphonese3-18-4 \
  --device iphonese3-26-3 \
  --test ./IOS_TESTS.zip

テストのタイムアウト

テストの実行時間を制限します。

gcloud alpha device-run sessions submit xctest \
  --device iphonese3-18-4 \
  --test ./IOS_TESTS.zip \
  --xctest-timeout=10m

有効範囲は 1m~1h で、デフォルトは 5m です。

ソフトウェア バージョン

利用可能なソフトウェア パッケージと Apple Xcode のバージョンを検出して使用し、テスト実行を構成する前に、ライフサイクル、サポートされているバージョン、メタデータを検査します。

まず、利用可能なすべてのソフトウェア パッケージとそのバージョンを一覧表示します。

gcloud alpha device-run software-versions list

次のような出力が返されます。

ID                                NAME                              SOFTWARE_TYPE               VERSION  STATE   IS_DEFAULT
androidx-test-orchestrator-1-4-1  AndroidX Test Orchestrator 1.4.1  ANDROIDX_TEST_ORCHESTRATOR  1.4.1    ACTIVE  True
androidx-test-orchestrator-1-6-1  AndroidX Test Orchestrator 1.6.1  ANDROIDX_TEST_ORCHESTRATOR  1.6.1    ACTIVE
xcode-16-4                        Xcode 16.4                        XCODE                       16.4     ACTIVE
xcode-26-2                        Xcode 26.2                        XCODE                       26.2     ACTIVE  True

次に、リストから正確なリソース ID を使用して、特定のパッケージを記述します。

gcloud alpha device-run software-versions describe xcode-16-4

出力は次のようになります。

id: xcode-16-4
lifecycle:
  state: ACTIVE
name: Xcode 16.4
softwareType: XCODE
supportedIosVersions:

-   '15.0'
-   '15.1'
-   '15.2'
-   '15.4'
-   '15.7'
-   '16.0'
-   '16.1'
-   '16.2'
-   '16.3'
-   '16.5'
-   '16.6'
-   '18.0'
-   '18.3'
-   '18.4'
version: '16.4'

利用可能なソフトウェア バージョンがわかったので、次のように --xcode-version フラグを使用してテスト実行で使用できます。

gcloud alpha device-run sessions submit xctest \
  --device iphonese3-18-4 \
  --test ./IOS_TESTS.zip \
  --xcode-version=16.4

ステップ 2. デバイスの種類を選択する

device-run CLI を使用すると、利用可能な物理デバイスで iOS テストを実行できます。利用可能なデバイスの完全なリストを表示するには、インタラクティブなデバイス カタログにアクセスするか、次のコマンドを実行します。

gcloud alpha device-run devices list

出力例:

ID                MAKE   NAME           MODEL        HARDWARE_TYPE  OS_VERSION  CAPACITY  AVAILABILITY  PRODUCTS
iphonese3-18-4    Apple  iPhone SE 3             iphonese3    PHYSICAL       18.4        NONE      NONE          Automation
iphonese3-26-3    Apple  iPhone SE 3             iphonese3    PHYSICAL       26.3        NONE      NONE          Automation

このリストをフィルタする方法については、デバイス カタログをご覧ください。テスト実行の対象として特定のデバイスを指定するには、対応する ID(例: iphonese3-18-4)を指定します。

ステップ 3. XCTest を準備してパッケージ化する

テストを実行する前に、テストをコンパイルし、署名されていることを確認し、コード署名を検証して、結果のアーティファクトを .xctestrun 構成とアプリケーション テスト バンドルを含む ZIP ファイルにパッケージ化する必要があります。

1. 物理的な iOS デバイス用のテストをビルドする

Xcode でプロジェクトを開き、テスト用にアプリとテスト ターゲットをビルドします。

  1. アプリ ターゲットとテストランナー ターゲットの両方で、Xcode でコード署名が正しく構成されていること(有効なプロビジョニング プロファイルとデベロッパー ID を指定していること)を確認します。
  2. Xcode([Product] > [Build For] > [Testing])または xcodebuild を使用して、テスト用にビルドします。

    ワークスペースの場合:

    xcodebuild build-for-testing \
      -workspace YourProject.xcworkspace \
      -scheme YourScheme \
      -derivedDataPath ./build \
      -destination "generic/platform=iOS"
    

    スタンドアロン プロジェクトの場合:

    xcodebuild build-for-testing \
      -project YourProject.xcodeproj \
      -scheme YourScheme \
      -derivedDataPath ./build \
      -destination "generic/platform=iOS"
    

これにより、ビルド プロダクトが ./build/Build/Products に生成されます。

2. ビルド プロダクトと署名を確認する

ビルド後、アプリケーション、ランナー、.xctestrun マニフェストが ./build/Build/Products/ に生成されたことを確認します。ローカルで署名されている場合は、codesign を使用してバンドル署名を検証できます。

  1. App Bundle を確認します。

    codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp.app
    

    予想される出力: YourApp.app: valid on disk

  2. XCUITest を実行している場合は、テストランナー バンドルも検証します。

    codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp-Runner.app
    

    予想される出力: YourApp-Runner.app: valid on disk

3. ZIP アーカイブを作成する

ビルド出力プロダクト フォルダにある Debug-iphoneos ディレクトリと .xctestrun ファイルの両方を 1 つの ZIP アーカイブに圧縮します。

ビルド プロダクト ディレクトリから次のコマンドを実行します。

cd ./build/Build/Products
zip -r MyTests.zip Debug-iphoneos *.xctestrun

これにより、--test フラグで使用できるパッケージ化された MyTests.zip が作成されます。

ステップ 4. XCTest を実行する

次のフラグは必須です。

  • デバイス: --device を使用してデバイスを指定します。--device iphonese3-18-4
  • テスト: --test を使用してテスト zip ファイルを指定します。--test ./MyTests.zip

XCTest を実行するには、gcloud alpha device-run sessions submit xctest コマンドを使用します。前の手順でコンパイルしたテスト Zip ファイル(MyTests.zip)を指定する必要があります。

基本的なテスト セッションを実行するには:

gcloud alpha device-run sessions submit xctest \
  --device iphonese3-18-4 \
  --test ./MyTests.zip

実行が開始されると、CLI に作成されたセッション ID と、結果が保存される Cloud Storage の宛先が表示されます。

Creating session [session-ee78b0ed] in location [global].
Result files will be stored at [https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/session-ee78b0ed/].

Waiting for session [session-ee78b0ed] to complete....

ステップ 5. テスト実行の探索と管理

次のコマンドを使用して、アクティブな実行を追跡し、過去のセッションを管理できます。

  • セッションの説明: セッションのライブ進行状況または最終結果をクエリします。gcloud alpha device-run sessions describe SESSION_ID --full を追加すると、デバイスの割り当て、実行 ID、Cloud Storage アーティファクト パスなどの詳細が表示されます。
  • セッションを一覧表示する: 最近の実行を表示します。gcloud alpha device-run sessions list --limit=10
  • セッションをキャンセル: 実行中のテスト セッションを停止します。gcloud alpha device-run sessions cancel SESSION_ID
  • オペレーションのキャンセル: 保留中またはアクティブなオペレーションを停止します。gcloud alpha device-run operations cancel OPERATION_ID

次のステップ

次は、ログを検索して分析します。