iOS のプライバシーに関するアラート

重要

Visual Studio App Center は、2025 年 3 月 31 日に廃止される予定です。 完全に廃止されるまで Visual Studio App Center を引き続き使用できますが、移行を検討できる推奨される代替手段がいくつかあります。

詳細については、サポートタイムラインと代替手段に関するページを参照してください。

注意

この記事では、アプリケーションで で UIAlertViewController 作成されたアラートについては説明しません。 これらは、適切なテスト クエリによって直接処理できます。 むしろ、この記事では、標準の UI クエリでは処理できない iOS によって生成されるアラートについて説明します。

iOS アプリケーションの実行中に、アプリケーションが Apple プッシュ通知、位置情報サービス、連絡先、デバイス マイクまたはカメラなどのアクティブ化またはアクセスを試みてアクセス許可を要求すると、オペレーティング システムはユーザーにさまざまな時間にアラートを表示する場合があります。 これらのポップアップは、アラート、システム アラート、システム ポップアップ、Springboard アラート、またはプライバシー ダイアログと呼ばれることもあります。 これらの要求が受け入れられると、その受け入れ状態が保持されるため、ユーザーは通常、デバイス上のそのアプリに対してそのアラートを再び表示しません。

アプリを最初にインストールするときは、これらのアラートに対処する必要があります。 要求が以前に受け入れられていた場合、ローカルで実行されているテストでアラートが見つからない場合があります。

App Center Test でテストを実行すると、元の状態のデバイスで実行され、アプリケーションが保護されたサービスまたは機能にアクセスしようとするとアラートがトリガーされます。

App Center Test でのこれらのアラートの処理は、テスト フレームワークによって異なります。

Xamarin.UITest と Calabash iOS

Xamarin.UITest と Calabash は、知っているアラートを自動的に受け入れます。 既知のアラートは、テキストの照合に基づいています。 SpringBoard アラートが無視されない場合は、 DeviceAgent.json ファイルでアラート タイトルを検索します。

$ cd DeviceAgent.iOS
$ git pull
$ find Server/Resources.xcassets -name "alerts.json" -exec grep -q "to access your location" {} \; -print
Server/Resources.xcassets/springboard-alerts/springboard-alerts-en_GB.dataset/alerts.json
Server/Resources.xcassets/springboard-alerts/springboard-alerts-en_AU.dataset/alerts.json
Server/Resources.xcassets/springboard-alerts/springboard-alerts-en.dataset/alerts.json

アプリケーションに、そのファイルにないアラートがある場合は、 に > 移動します。 追加するには、App Center Web サイトのサポートにお問い合わせください。 既にそのファイルに含まれている場合は、デバイスの構成に問題がある可能性があります。これは、App Center テスト サポートにバグとして報告する必要があります。

注意

Xamarin.UITest API に表示 DismissSpringboardAlerts() される場合があります。 DismissSpringboardAlerts() は、Xamarin.UITest が内部的に使用するメソッドです。 通常、ユーザー テスト コードで を呼び出す DismissSpringboardAlerts() 必要はありません。

XCUITest と UIAutomation の比較

Xamarin.UITest と Calabash では、デバイスとの対話に 2 つの Apple テスト フレームワークのいずれかを使用します。

  • テストをローカルで実行している場合、Apple Test Framework は XCUITest です
  • iOS 10 以降を使用して App Center Test でテストを実行している場合、Apple Test Framework は XCUITest です
  • iOS 10 より古い iOS バージョンの App Center Test でテストを実行している場合は、Apple の UIAutomation を使用しています。

UIAutomation を使用したテストでは、Apple の UIAutomation フレームワークがテスト対象のアプリケーションを制御するために、最初のアラートが発生するまでにアプリケーションの遅延が必要です。 これがアプリケーションとテストの問題である場合は、「 プライバシー アラートの管理: Location Services、APNS、連絡先」を参照してください。

Calabash iOS

Xamarin.UITest などのアラートを自動的に処理するだけでなく、Calabash ではアラートを手動で管理することもできます。

  • アラートが表示されているかどうかをチェックし、その属性に対してクエリを実行するには、QueryRoutes.m を参照してください/springboard-alert
  • アラートを閉じるには、特定のタイトルでボタンをタッチして、GestureRoutes.m を参照してください/set-dismiss-springboard-alert
  • 既知のアラートを無視し、自動無視を切り替えるには、MetaRoutes.m の と /set-dismiss-springboard-alerts-automatically を参照してください/dismiss-springboard-alerts。 が呼び出され、不明なアラートが発生した場合 /dismiss-spring-board-alerts 、例外が発生します。

次の Calabash iOS コード スニペットは、次のメソッドの使用方法を示しています。

...
# Turn off automatic alert dismissal
device_agent.dismiss_springboard_alerts_manually!

# Do whatever triggers the alert, then wait for the alert
# that may or may not appear.
begin
  device_agent.wait_for_springboard_alert(10) # timeout is optional
  device_agent.dismiss_springboard_alert("OK")
rescue RuntimeError
   # Alert didn't appear, so there's nothing to do
end
...

# Turn automatic dismiss back on
dismiss_springboard_alerts_automatically!

Appium

アラートについては、Appium のドキュメントを参照してください。

XCUITest

UI 割り込みの監視については、Apple のドキュメントを参照してください。

ヘルプの表示

右上隅の ? アイコンからいつでもお問い合わせください。 24 時間 365 日サポートは提供されませんが、できるだけ早く返信します。

テストの実行に関するヘルプが必要な場合は、問題のテスト実行に移動し、ブラウザーから URL をコピーして、サポートの会話に貼り付けます。 テスト実行 URL は のようになります https://appcenter.ms/orgs/OrgName/apps/App-Name/test/runs/77a1c67e-2cfb-4bbd-a75a-eb2b4fd0a747