MagicPodではカメラ機能のテストが可能です。
特にクラウド環境であれば、あらかじめ任意の画像をセットできるため、QRコード決済のスキャンなど、これまでテストが難しかった操作も簡単に検証できます。
目次
クラウド環境
「カメラ用に画像をセット」コマンドを使用すると、クラウド端末の背面カメラに任意の画像をセットしてテストを実行できます。静止画だけでなく、アニメーション画像も指定可能です。
コマンドの使用方法
「カメラ用に画像をセット」コマンドで画像をセットした状態でアプリのカメラ機能で撮影すると、コマンドでセットした画像が取得されます。
画像はテスト実行中に何度でも差し替えることができます。
アプリ側が画像内のQRコード・バーコード・顔・物体などの情報を検出する場合、その検出結果は自動的にアプリに渡されます。
制限事項
iOS/Android共通
- 背面カメラの画像だけ設定可能です。正面カメラの画像設定には対応していません。
- フラッシュやフォーカスなどの撮影設定は、取得される画像に影響しません。
- 本コマンドで画像を設定する前にテスト対象アプリが写真撮影を試みた場合、写真を取得することはできません。
iOS
- iOS 17以降のクラウド端末でのみご利用いただけます。
- Live Photos には対応していません。
- ポートレートモードなどの深度を利用した機能には対応していません。
- 本機能を使わずに iOS シミュレータのカメラを利用してテストを実行するように作られたテスト対象アプリの場合、本機能を有効にするとテスト対象アプリが正常に動作しなくなることがあります。
Android
-
テスト実行設定の「端末の種類」が「エミュレータ (arm64-v8a)」のAndroidクラウド端末でのみご利用いただけます。
- コマンドでセットした画像のサイズが大きすぎる場合は、最大 1920×1080 に縮小されます。縮小の有無にかかわらず、画像はアプリが要求する解像度に対して、アスペクト比を保ったまま収まるように配置されます。そのため、アプリが要求するアスペクト比が画像のアスペクト比と異なる場合、画像の周囲に黒帯が表示されます(レターボックス/ピラーボックス)。
アプリ開発者向け情報
iOS
下記に記載のメソッド名は Swift版のものです。対応するObjective-C版メソッドについては、Apple社の公式ドキュメントをご参照ください。
設定した画像は標準のカメラパイプラインを通じて提供されるため、以下はすべて実際のカメラがその画像を返しているかのように動作します。
- 写真撮影(
AVCapturePhotoOutput)— 設定した画像が撮影写真として返されます。 - ライブプレビュー(
AVCaptureVideoPreviewLayer)— 設定した画像がカメラプレビューに表示されます。 - ビデオフレーム(
AVCaptureVideoDataOutput)— 設定した画像がフレームごとに配信されます。 - 動画録画(
AVCaptureMovieFileOutput)— 設定した画像の動画として録画されます。 - メタデータ(バーコード、QR コード、顔検出など)(
AVCaptureMetadataOutput)— 設定した画像内のメタデータが検出・報告されます。
写真撮影のフロー
写真撮影の場合、テスト対象アプリは以下のフローを使用する必要があります。
- テスト対象アプリは
AVCapturePhotoOutputクラスのcapturePhoto(with:delegate:)を呼び出し、デリゲートのインスタンスを渡す必要があります。
capturePhoto(with:delegate:) が呼び出されると、クラウドデバイスは以下のデリゲートメソッドを順番に呼び出します。
-
photoOutput(_:willBeginCaptureFor:)→ 撮影が開始されることを通知します。 -
photoOutput(_:willCapturePhotoFor:)→ 写真が撮影される直前であることを通知します。 -
photoOutput(_:didFinishProcessingPhoto:error:)→ 撮影された(この場合はシミュレートされた)写真画像を返します。 -
photoOutput(_:didFinishCaptureFor:error:)→ 写真撮影処理が完了したことを通知します。
デリゲートが特定のメソッドを実装していない場合、そのメソッドは単にスキップされます。これら以外のメソッドは呼び出されません。
実行時エラーを防ぐため、カメラ関連クラスの基本的な API は安全に動作するよう構成されています。
-
AVCaptureSession -
AVCaptureDevice -
AVCaptureDeviceInput -
AVCaptureDeviceDiscoverySession -
AVCapturePhotoOutput -
AVCapturePhoto -
AVCaptureResolvedPhotoSettings -
AVCaptureVideoDataOutput -
AVCaptureVideoPreviewLayer -
AVCaptureMetadataOutput -
AVCaptureMovieFileOutput AVCaptureConnection
より高度なカメラ制御やカスタマイズが必要な場合は、お問い合わせください。
Android
端末のカメラからフレームを受け取る API であれば、いずれもセットした画像を受け取ります。CameraX、Camera2、非推奨の Camera API、また ML Kit のバーコードスキャンなど、それらの上に構築されたライブラリからも、セットした画像にアクセスして利用できます。利用できる API に制限はなく、アプリ側で特別な対応を行う必要もありません。
ローカルPC環境
ローカルPC環境では、カメラ機能が使用可能です。ただし、クラウド環境のように任意の画像をセットすることはできません。
外部クラウドサービス環境
SauceLabsなどの外部クラウドサービス環境では、カメラ機能が使用可能です。ただし、クラウド環境のように任意の画像をセットすることや、画像内のQRコード・バーコード・顔・物体などの情報を検出させる機能には現在対応していません。