UWPの新機能をおさえよう
古代魚庵
西村誠
Universal Windows Platform
概要
UWP(Win10)とストアアプリ(Win8.x)
2つのアプリプラットフォームの違いについて
UWPの特徴である
複数のプラットフォームに対応する方法
お品書き
・ストアアプリ≒UWP
・様々なデバイスに対応する
・各デバイスの拡張を知る
ストアアプリ≒UWP
ストアアプリ
・Windows 8.xで登場
・新しいAPI WinRT(ARM対応のOSじゃないよ)
・タッチ対応のUI
・ストアからの配布
ちょっとややこしい・・・。APIの名前の方。ARM対応の方のWinRTは普及しませんでしたね
Windows 7以前のOSでは動作しない
全画面で起動するなどマウス&キーボー操作だと不便な点も
ストアアプリ
・PC(主にタブレット)とMobile向け
・もともとWindows Phone向けのAPIが進化
・Windows 10でも動くよ
・画面はXAML(画面定義)+コード
SilverlightベースからWinRTへ。Windows PhoneのAPIも色々歴史がありました
この頃、Windows Phoneは日本で・・・
DirectXで画面を描画する場合とコードがJSの場合は別。コードはC#、VB、C++、JS
ストアアプリ
・2プロジェクト 1共通プロジェクト
・2バイナリ
PC用と電話用のプロジェクト+Sharedプロジェクトでコードを共有。
バイナリレベルでは別物
UWP
・Windows 10から登場したプラットフォーム
・ストアアプリの進化形
・Windows 10なら動く
・XAML+コードなのは同様
違いもあるけど、動作モデルやAPIはおおむね共通。おおむねというのが曲者(あるある)
または動作するアプリケーションをUWP、UWPアプリと呼びます
PC、タブレット、IoT、スマフォなどなど。Xbox Oneでも動く予定・・・予定・・・買ったのに・・・
XAMLはHTMLのようなマークアップ言語
UWP
・1プロジェクト
・1バイナリ
・Windows Phone 7から始まる長い歴史が・・・
・コントロールが2つ増えた
ストアアプリとコードを共有したい場合は+Sharedプロジェクト
バイナリレベルで同じもの(もちろんCPUアーキテクチャレベルでは別)
Silverlightベースの電話と、WinRTなストアアプリから始まって・・・いや、昔話はするまい
SplitViewとRelativePanelというレスポンシブ向けのコントロール
Windows 10なら
https://doc.co/nzBEox
デスクトップ
・PC、タブレット向けのWindows 10
・ストアアプリからの移植も容易
スマフォ版はUI部分などたまにはまりどころがある
モバイル
・Windows 10 Mobile
・Windows Phone向け
日本発売おめでとう‼
IoT
・Windows 10 IoT
・Raspberry Pi 2などで動作
・組み込み機器でVisual Studio開発
たまに古いRaspberry Piを買って泣く人が・・・
これは個人的に新鮮な体験
未登場
・Xbox OneとかSurfaceタブとか、HoloLendsとか
来るよね!! 将来的にはMicrosoft Bandでも(これは、ただの願望)
ストアアプリ≒UWP
・大きな違いはUWPは色々なデバイスで動く
・UWPはWindows 10以降限定
・ストアから配布などが不要ならWPFやWFも
大きな利点もこれ
ターゲットのOSにWindows 8.xを含める?
枯れているだけにノウハウや、商用コントロールなどが充実。サンドボックスが無いのも
様々なデバイスに対応する
ここからは開発のお話し
コードでデバイス判定
・AnalyticsInfo.VersionInfo.DeviceFamily
・以下の文字列が取得できる
要:using Windows.System.Profile;
Windows IoTの場合”Windows.IoT”
Windows DeskTopの場合” Windows.Desktop”
Windows Mobileの場合” Windows.Mobile”
コードで機能を判定
・特定の機能が利用可能か調べる
・コード
Windows Phoneのハードウェアボタンとか、デバイス固有の機能
using Windows.Foundation.Metadata;
・・・
bool isHWButton =
ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons");
S
コードで機能を判定
・IsTypePresent以外にも
・いやいやもっと
IsEventPresent
IsMethodPresent
IsPropertyPresent
IsApiContractPresent
IsEnumNamdValuePresent
IsReadOnlyPropertyPresent
IsWriteablePropertyPresent
コードで機能を判定
・ストアアプリと同様の判定をする場合も
・コード
例えば、Windows Phonoのカメラとかはストアアプリの頃と同じ書き方・・・
var compass = Compass.GetDefault();
if (compass != null)
{
System.Diagnostics.Debug.WriteLine("コンパスがある場合の処理");
}
コードで機能を判定
・ストアアプリと同様の判定をする場合も
・DEMO:Accelerometer
例えば、Windows Phonoのカメラとかはストアアプリの頃と同じ書き方・・・
コードで分岐
・UWPとWindows Pone、ストアアプリを判定
・コード
Shared Projectでコードを共有したい場合など
#if WINDOWS_UWP
// UWPの場合
// さらにPCか電話かを判定する場合
var isMobile = VersionInfo.DeviceFamily == "Windows.Mobile";
#endif
#if WINDOWS_PHONE_APP
// Windows Phone 8.1の場合
#endif
#if WINDOWS_APP
// Windows 8.1の場合
#endif
コードで分岐
・UWPとWindows Pone、ストアアプリを判定
・DEMO:ifdef
Shared Projectでコードを共有したい場合など
コードで分岐
・文字列を忘れたらコンパイルシンボルで
プロジェクトのプロパティ→ビルド。UWPの場合
コードで分岐
・文字列を忘れたらコンパイルシンボルで
試しに変えてみよう
画面について
・策1.デバイスにこだわらず画面幅で判定
・AdaptiveTrigger
画面の横幅でレイアウトを変更
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState>
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="720" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="MySplitView.DisplayMode" Value="Overlay" />
画面について
・策1.デバイスにこだわらず画面幅で判定
DEMO:XamlResponsiveTechniques
画面の横幅でレイアウトを変更
画面について
・策2.デバイスファミリーで分岐
・XAMLをそれぞれ用意
画面の横幅でレイアウトを変更
各デバイスの拡張を知る
デバイス固有の拡張を利用する
拡張(Extention)
・デバイスファミリー固有の機能は参照から
ソリューションエクスプローラーの「参照」を右クリックから「参照の追加」!!
拡張(Extention)
・~ Extensions for the UWP
なんかWindows 10のビルド番号毎に拡張がある気がするけど、今は気にしないぜ・・・
拡張(Extention)
・~ Extensions for the UWP
Windows Desktop Extensions for the UWP
Windows IoT Extensions for the UWP
Windows Mobile Extensions for the UWP
Windows Team Extensions for the UWP
拡張(Extention)
・追加してみる
参照に追加された
拡張(Extention)
・エラーになる?
・デスクトップ拡張の機能を追加してIoTで実行
参照に追加しただけならOK。機能を使うとエラー。
拡張(Extention)
・中身は?
・主な中身はSDKManifest.xmlとIDL(or .h)
以下のURLにあるよ C:Program Files (x86)Windows Kits10Extension SDKs
IDLはインターフェイス定義ファイル
拡張-IoT
・SDKManifest.xmlから中身が推測できそう
・上のAPIが使えるようになる
例えばIoTの場合・・・
<ContainedApiContracts>
<ApiContract name="Windows.Devices.DevicesLowLevelContract" version="2.0.0.0"/>
<ApiContract name="Windows.System.SystemManagementContract" version="2.0.0.0"/>
</ContainedApiContracts>
拡張を追加してない場合はコードクラスが参照できずエラー
拡張-IoT
・DevicesLowLevelContract
Adcって何かなー(Analog-Digital Converter・・・だそうです・・・)
I2cって何かなー
拡張-IoT
・DevicesLowLevelContract
Adcって何かなー(Analog-Digital Converter)
I2cって何かなー(たぶん、これ→)
拡張-IoT
ごめん・・・
IoT用語わからん・・・
拡張-Mobile
・気を取り直してMobile
・以下が追加されます
IoTはハードル高いけど追加される拡張が少ないので把握はしやすいかな
次のスライドへ・・・
<ApiContract name="Windows.ApplicationModel.Activation.WebUISearchActivatedEventsContract" version="1.0.0.0"/>
<ApiContract name="Windows.ApplicationModel.Calls.Background.CallsBackgroundContract" version="1.0.0.0"/>
<ApiContract name="Windows.ApplicationModel.Calls.CallsPhoneContract" version="2.0.0.0"/>
<ApiContract name="Windows.ApplicationModel.SocialInfo.SocialInfoContract" version="1.0.0.0"/>
<ApiContract name="Windows.ApplicationModel.CommunicationBlocking.CommunicationBlockingContract"
version="1.0.0.0"/>
<ApiContract name="Windows.ApplicationModel.Wallet.WalletContract" version="1.0.0.0"/>
<ApiContract name="Windows.Devices.SmartCards.SmartCardBackgroundTriggerContract" version="1.0.0.0"/>
<ApiContract name="Windows.Devices.SmartCards.SmartCardEmulatorContract" version="2.0.0.0"/>
<ApiContract name="Windows.Embedded.DeviceLockdown.DeviceLockdownContract" version="1.0.0.0"/>
<ApiContract name="Windows.Gaming.Preview.GamesEnumerationContract" version="1.0.0.0"/>
<ApiContract name="Windows.Networking.NetworkOperators.NetworkOperatorsFdnContract" version="1.0.0.0"/>
<ApiContract name="Windows.Networking.Sockets.ControlChannelTriggerContract" version="1.0.0.0"/>
<ApiContract name="Windows.Phone.PhoneContract" version="1.0.0.0"/>
<ApiContract name="Windows.Phone.StartScreen.DualSimTileContract" version="1.0.0.0"/>
<ApiContract name="Windows.Services.Maps.GuidanceContract" version="2.0.0.0"/>
<ApiContract name="Windows.Services.Maps.LocalSearchContract" version="2.0.0.0"/>
<ApiContract name="Windows.Security.EnterpriseData.EnterpriseDataContract" version="2.0.0.0"/>
<ApiContract name="Windows.System.Profile.ProfileHardwareTokenContract" version="1.0.0.0"/>
<ApiContract name="Windows.System.Profile.ProfileRetailInfoContract" version="1.0.0.0"/>
<ApiContract name="Windows.System.UserProfile.UserProfileContract" version="1.0.0.0"/>
<ApiContract name="Windows.UI.WebUI.Core.WebUICommandBarContract" version="1.0.0.0"/>
拡張-Mobile
・いくつか抜粋
ちょっと推測まじり・・・
Calls.Background.CallsBackgroundContract
Calls.CallsPhoneContract
アプリから電話をコールしたり、コールをトリガーするため
のAPI
Windows.ApplicationModel.SocialInfo.SocialInfoContract
たぶんSNS連携的な・・・
拡張-Mobile
・いくつか抜粋
かなり推測まじり・・・
Wallet.WalletContract
決済処理
SmartCards.SmartCardBackgroundTriggerContract
SmartCards.SmartCardEmulatorContract
カードリーダーで情報を読み取る?(海外事情?)
拡張-Desktop
・いくつか抜粋
かなり推測まじり・・・
Scanners.ScannerDeviceContract
スキャナー
Media.Capture.AppCaptureContract
Media.Capture.CameraCaptureUIContract
Webカメラなどのメディア系
拡張-Desktop
・いくつか抜粋
かなり推測まじり・・・
Globalization.GlobalizationJapanesePhoneticAnalyzerContract
日本語音声解析
Networking.Sockets.ControlChannelTriggerContract
ソケット接続周り
拡張-Team
・一個だけ
・最後なのでもう少し追いかけてみる
まだモノが公に出てないから、今後増えるのかも
Windows.System.Profile.ProfileSharedModeContract
拡張-Team
・オブジェクトブラウザー
SharedMobeSettingsクラスがある模様
拡張-Team
・オブジェクトブラウザー
・winmdの場所
SharedMobeSettingsクラスがある模様
拡張-Team
・winmdをILSpyで確認
Bool値を返すプロパティが一つ
Provides access to the settings for shared mode. For example, devices with
large screens could support communal shared apps.
大画面をサポートした共有可能なアプリかを返す?(わかるような・・・)
まとめ
・UWPは色々なデバイスで動作する
・UWPはデバイスや画面幅で作り分けれる
・UWPはデバイス特有の拡張も使える
だからアプリを作ろう
だからアプリを作ろう
だからアプリを作ろう
御静聴ありがとうございました

More Related Content

PDF
初心者でも Windows 10 Mobile アプリを作りたい!
ODP
まだTwitterで消耗してるの?
PPTX
Uwpハンズオン参加レポート
PDF
Azure of the_weekend_hobby
PPTX
2016年注目の.netテクノロジー
PDF
S93 Microsoft Azure サービスの管理
PDF
はじめての UWP アプリ開発
PDF
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
初心者でも Windows 10 Mobile アプリを作りたい!
まだTwitterで消耗してるの?
Uwpハンズオン参加レポート
Azure of the_weekend_hobby
2016年注目の.netテクノロジー
S93 Microsoft Azure サービスの管理
はじめての UWP アプリ開発
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう

Similar to Universal windows platformの新機能をおさえよう (20)

PPTX
Uwpアプリケーション開発入門
PDF
Universal Apps (UWP)
PPTX
20150926 uwpストア攻略
PPTX
(公開用)Xamarin & universal windowsアプリで広がるwindowsストア解説
PPTX
Windowsストア アプリケーション概要(概要編)
PPTX
はじめてのUWPアプリ
PDF
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
PDF
ストアアプリ →universal Windows Apps =WP8.1アプリ
PPTX
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
PDF
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
PDF
Windows 10 Developer Readiness [Japan]
PPTX
Uwpに至る道
PDF
Windows 8.1開発入門ー新しいストアアプリ環境について(公開用)
PPTX
Windows ストアアプリを HTMLで作成する
PDF
Windowsストアアプリ開発 オープンセミナー広島
PDF
20150530 めとべや東京8 universal windows platform appの画面開発
PDF
かずきのUWP入門
PDF
Windows Store アプリをuniversal にして申請する手順
PDF
Windowsストア アプリケーション概要(紹介編)
PDF
[2013/12/03] Developer Camp / Windows ストア アプリ 開発概要
Uwpアプリケーション開発入門
Universal Apps (UWP)
20150926 uwpストア攻略
(公開用)Xamarin & universal windowsアプリで広がるwindowsストア解説
Windowsストア アプリケーション概要(概要編)
はじめてのUWPアプリ
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
ストアアプリ →universal Windows Apps =WP8.1アプリ
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
Windows 10 Developer Readiness [Japan]
Uwpに至る道
Windows 8.1開発入門ー新しいストアアプリ環境について(公開用)
Windows ストアアプリを HTMLで作成する
Windowsストアアプリ開発 オープンセミナー広島
20150530 めとべや東京8 universal windows platform appの画面開発
かずきのUWP入門
Windows Store アプリをuniversal にして申請する手順
Windowsストア アプリケーション概要(紹介編)
[2013/12/03] Developer Camp / Windows ストア アプリ 開発概要
Ad

More from Makoto Nishimura (20)

PPTX
リモートで技術を伝える方法(発表版)
PPTX
リモートで技術を伝える方法(フル)
PPTX
windows terminal入門
PPTX
Minecraftでプログラミングを学べるって本当?
PPTX
Power Automateを使ってみた
PPTX
Power Automate Desktop入門
PPTX
Microsoft Teams Custom
PPTX
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)
PPTX
AzureDevOpsの機能解説
PPTX
EC-CUBE 4 入門
PPTX
OSS開発で.NETを活用してDevOps
PPTX
.NETの最近
PPTX
Amazon echoがやってきた
PPTX
2017年度注目の.netテクノロジー
PPTX
Azure上でec cubeを運用するポイント
PPTX
2016年11月.NETラボLT:超余談ゲームプラットフォームの話
PPTX
Xamarin入門(技術というより心構え編)
PPTX
独自Ecサイト立ち上げワンストップセミナー 0907
PPTX
Uwpでみるxaml入門第二回
PPTX
Uwpでみるxaml入門
リモートで技術を伝える方法(発表版)
リモートで技術を伝える方法(フル)
windows terminal入門
Minecraftでプログラミングを学べるって本当?
Power Automateを使ってみた
Power Automate Desktop入門
Microsoft Teams Custom
WinUI 3.0 Preview 1を触ってみた(.NETラボ2020年6月登壇資料)
AzureDevOpsの機能解説
EC-CUBE 4 入門
OSS開発で.NETを活用してDevOps
.NETの最近
Amazon echoがやってきた
2017年度注目の.netテクノロジー
Azure上でec cubeを運用するポイント
2016年11月.NETラボLT:超余談ゲームプラットフォームの話
Xamarin入門(技術というより心構え編)
独自Ecサイト立ち上げワンストップセミナー 0907
Uwpでみるxaml入門第二回
Uwpでみるxaml入門
Ad

Recently uploaded (8)

PPTX
Vibe Codingを触って感じた現実について.pptx .
PDF
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
PDF
20250823_IoTLT_vol126_kitazaki_v1___.pdf
PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
PDF
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
PPTX
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
PDF
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
Vibe Codingを触って感じた現実について.pptx .
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual...
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
20250823_IoTLT_vol126_kitazaki_v1___.pdf
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
Yamaha DT200WR Real Enduro ENGINE CYLINDER TRANSMISSION
Cosense - 整えずして完全勝利!Cosenseが他のwikiツールと違う理由
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...

Universal windows platformの新機能をおさえよう