de:code 2016参加者特典の資料ダウンロードが、いつの間にか正式版の当日資料に置き換わっていたので、CLT-002「Windows 10デバイスとUWP完全解説」の内容から、個人的に必要なところを勉強を兼ねてピックアップしてみる。当日資料で省略されている部分も多いので、適宜調べながら補足してみる。
本セッションは人気だったようで、動画がChannel9で先行公開されてます。ご参考まで。
デバイスファミリ
Windows 10では下記のデバイスファミリが規定されている。
- Windows 10 Desktop
- Windows 10 IoT
- Windows 10 Mobile
- Windows 10 Team (=Surface Hub)
[補足]HoloLensは「Holographic」、Xbox Oneは「Xbox」というファミリ名が割り当てられている。
from BuildInsider「UWPアプリとは? ― 全(=ユニバーサル)Windowsプラットフォーム向けアプリの開発」
デバイスファミリの検出
アプリが動作しているデバイスファミリを確認する。
Windows.System.Profile.AnalysticsInfo.DeviceForm
APIサポートの有無の確認
デバイスファミリの検出では不十分な場合、ハードウェアでのサポートを確認する。
[例]Mobile端末の一部にのみ搭載されている「カメラボタン」
Windows.Foundation.Metadata,ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")
[補足]APIを細分化した、APIコントラクト単位での確認には、ApiInformation.IsApiContractPresentメソッドを使用する。
from Windowsデベロッパーセンター「ユニバーサル Windows プラットフォーム (UWP) アプリのガイド」
#if~#endif = UWPとWindows 8.1/Phone 8.1のコードを共有したい場合
- WINDOWS_UWP
- WINDOWS_APP (=Windows 8.1)
- WINDOWS_PHONE_APP (=Windows Phone 8.1)
アプリを動作させるデバイスファミリを限定したい場合
Package.appxmanifest ファイルに指定する。複数指定も可能。
<Dependencies>
<TargetDeviceFamily Name="Windows.Mobile" MinVersion="10.0.x.0">
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.x.0">
</Dependencies>
デバイス毎に固有のXAMLファイルを使いたい場合
DeviceName修飾子を使用する。
[例1]ファイル単位
MainPage.DeviceFamily-Mobile.xaml
MainPage.DeviceFamliy-Desktop.xaml
[例2]フォルダ単位
DeviceFamily-Mobileフォルダ/MainPage.xaml
DeviceFamily-Desktopフォルダ/MainPage.xaml
[補足]いずれの例でも、MainPage.Xamlおよび配下のコードビハインドが別にある。
MainPage.xaml (=実行デバイスのファミリ名がMobile,Desktop以外の場合に使用される)
MainPage.xaml.cs (=コードビハインドは全デバイスファミリで共有される)
from Windowsデベロッパーセンター「XAML を使ったページ レイアウトの定義」
感想
マイクロソフト公式のドキュメントが結構日本語化されているのにも気づいた。あとでちゃんと読もう。
Windowsデベロッパーセンター「ドキュメント > Windowsアプリ」