WWDC25:Record, replay, and review: UI automation with Xcode

UIテストの自動化について。全然使いこなしていないので、結果の録画機能がここまで充実しているとは知らなかったし、失敗結果をもとに実装の修正案を提案までしてくれるとは優秀過ぎる。


0:00 – Introduction and agenda

  • Xcode の UI automation を使って、ワンクリックで複数のデバイス、言語、設定でアプリを実行
  • 全ての実行の高品質ビデオ録画を取得可能
  • テストフレームワーク:Swift Testing と XCTest の2つがある
  • XCUIAutomation:XCTest インポート時に自動で含まれ、人と同じようにアプリを自動化
  • テストの種類
    • Unit tests:アプリのロジックとモデルをテスト
    • UI automation tests:ユーザー体験、Apple ハードウェア統合、共通ワークフローをテスト

3:58 – UI automation overview

  • UI automation の利点:ジェスチャテスト、アクセシビリティ技術での知覚テスト、多言語対応確認、ハードウェア機能統合テスト、起動パフォーマンステスト
  • 3つのフェーズ:Record(操作録画)→ Replay(複数設定で再生)→ Review(ビデオと結果確認)
  • プラットフォーム対応:iOS、iPadOS、macOS、watchOS、tvOS、visionOS で同じ自動化を実行可能

6:26 – Prepare your app for automation

  • アクセシビリティとの関係:UI automation はアクセシビリティフレームワークを基盤とする
  • コード変更なく導入することが可能だが、以下手順を踏むことでテスト品質を高められる
  • accessibility identifier の追加
    • 要素を一意に識別する最良の方法
    • ローカライズされた文字列や動的コンテンツを持つ要素に追加
    • 良い identifier:アプリ全体で一意、説明的、静的
    • SwiftUI:accessibilityIdentifier modifier
    • UIKit:accessibilityIdentifier プロパティ
  • Accessibility Inspector:アクセシビリティの問題を発見・診断・修正するツール
  • UI Testing Bundle の追加:プロジェクト設定で新しい UI テストターゲットを追加

11:32 – Record your interactions

  • 録画プロセス:サイドバーのボタンで UI 録画開始、操作がコードとして自動記録
  • 録画後の作業
    • 録画されたコードのレビュー
    • XCTest API を使用した検証の追加
    • 他の automation API の探索
  • UI クエリの選択
    • ローカライズされた文字列:テキストそのものでなく、accessibility identifier を選択
    • 深くネストされたビュー:最短のクエリを選択
    • 動的コンテンツ:より汎用的なクエリ(e.g. .firstMatch)や identifier を使用
  • 検証の追加waitForExistencewait(for:toEqual:)XCTAssert などを使用
  • セットアップ最適化:orientation、appearance、location の設定、launchArgumentslaunchEnvironment の使用
    • アクセシビリティ監査の実行:.performAccessiblityAudit()

17:30 – Replay in multiple configurations

  • Test Plan の活用
    • 個別テストの包含・除外
    • システム設定の管理
    • タイムアウト、繰り返し、並列化の設定
  • 複数設定の構成
    • 各ロケールを個別の設定として追加
      • ドイツ語(長い文字列)、アラビア語・ヘブライ語(右から左のレイアウト)など長い言語のための個別構成も可能
    • 実行中ビデオ、スクショをキャプチャするか、実行後も残すか(デフォルトは失敗時のみ残す)
  • Xcode Cloud
    • クラウドでのビルド、テスト実行、App Store アップロード
    • チーム全体での実行履歴とビデオ録画の共有

20:54 – Review videos and results

  • Test Report の機能
    • 失敗したテストへのナビゲーション
    • ビデオ録画と説明の表示
    • 異なる設定での実行間の素早い切り替え
  • ビデオ解析
    • タイムライン上での失敗箇所へ直接ジャンプ
    • 失敗時点での UI 要素のオーバーレイ表示
      • 要素をクリックして、自動化コード内での推奨実装が表示
      • 複数の代替例の表示とコードの直接コピー、該当箇所に直接遷移し、ペーストして修正