Windows SDK の各リリースでは、利用できる新しい機能が追加されます。 ただし、すべての顧客がデバイスを最新バージョンのWindowsに同時に更新するわけではありません。 アプリを可能な限り幅広いデバイスで動作させる一方で、使用可能な場合は新機能も利用できるようにする必要があります。
最も広範なWindows デバイスをサポートするには、次の 3 つの手順に従います。
- 最新の API をターゲットにするようにVisual Studio プロジェクトを構成します。 これは、ビルド時にコンパイラがアクセスできる内容に影響します。
- ランタイム チェックを実行して、アプリが実行されているデバイスに存在する API のみを呼び出していることを確認します。
- Windowsの最小バージョンとターゲット バージョンでアプリをテストします。
Visual Studio プロジェクトを構成する
複数のWindows バージョンをサポートする最初の手順は、Visual Studio プロジェクトでターゲットと最小サポートされる OS/SDK のバージョンを指定することです。
- ターゲット — Visual Studio がアプリ コードのコンパイル対象とする SDK バージョン。 この SDK バージョンのすべての API とリソースは、コンパイル時にアプリ コードで使用できます。
- 最小 - アプリが実行できる最も古い OS バージョンをサポートする SDK バージョン。
実行時に、アプリはデプロイ先の OS バージョンに対して実行されます。 そのバージョンでは使用できない API を使用している場合、アプリは例外をスローします。 この記事で後述するように、ランタイム チェックを使用して正しい API を呼び出します。
Tip
Visual Studioでは、API の互換性に関する警告は表示されません。 アプリが、最小バージョンとターゲットバージョンを含むすべての OS バージョンで正しく動作することをテストして確認するのは、お客様の責任です。
Visual Studioで新しいプロジェクトを作成するときに、アプリでサポートされているターゲット バージョンと最小バージョンを設定します。 既定では、ターゲット バージョンはインストールされている SDK のバージョンが最も高く、最小バージョンはインストールされている SDK の最小バージョンです。
既存のprojectの最小バージョンとターゲット バージョンを変更するには、Project>Properties>Application>Targeting に移動します。
API チェックを実行する
アダプティブ アプリのバージョン管理の鍵となるのは、API コントラクトと ApiInformation クラスの組み合わせです。 このクラスを使用すると、指定した API コントラクト、型、またはメンバーが存在するかどうかを検出できるため、さまざまなデバイスと OS バージョンにわたって API 呼び出しを安全に行うことができます。
API コントラクト
デバイス ファミリ内の API のセットは、API コントラクトと呼ばれる下位区分に分割されます。
ApiInformation.IsApiContractPresent メソッドを使用して、API コントラクトの有無をテストします。 これは、すべて同じバージョンの API コントラクトに存在する多くの API をテストする場合に便利です。
bool isScannerContractPresent =
Windows.Foundation.Metadata.ApiInformation.IsApiContractPresent(
"Windows.Devices.Scanners.ScannerDeviceContract", 1);
API コントラクトは、特定の機能を提供する関連 API のセットである機能を表します。 API コントラクト内の任意の API を実装するプラットフォームでは、そのコントラクト内のすべての API を実装する必要があります。 コントラクトを 1 回テストし、その API のいずれかを安全に呼び出します。
最も大きく、最も一般的に使用されるコントラクトはWindows.Foundation.UniversalApiContractであり、Windows ランタイム API の大部分が含まれています。 使用可能なコントラクトの一覧については、「 デバイス ファミリ拡張 SDK と API コントラクト」を参照してください。
バージョン対応コードと条件付きXAML
コード内の条件で ApiInformation クラスを使用して、呼び出す前に API の存在をテストします。
IsTypePresent、IsEventPresent、IsMethodPresent、IsPropertyPresentなどのメソッドを使用すると、必要な粒度でテストできます。
詳細と例については、「 バージョン アダプティブ コード」を参照してください。
アプリの最小バージョンがビルド 17763 (バージョン 1809) 以降の場合は、 条件付き XAML を使用してプロパティを設定し、コード ビハインドなしでマークアップ内のオブジェクトをインスタンス化できます。 条件付き XAML は、マークアップで ApiInformation.IsApiContractPresent を直接使用する方法を提供します。
詳細と例については、「 条件付き XAML」を参照してください。
自分のバージョン アダプティブ アプリをテストする
バージョン アダプティブ コードまたは条件付き XAML を使用する場合は、最小バージョンを実行しているデバイスと、ターゲット バージョンのWindowsを実行しているデバイスでアプリをテストします。
1 つのデバイスですべての条件付きコード パスをテストすることはできません。 サポートされている最小 OS バージョンを実行しているリモート デバイス (または仮想マシン) にアプリをデプロイしてテストし、すべてのコード パスが正しく動作することを確認します。
関連するコンテンツ
Windows developer