Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

3,215 views

Published on

2016年2月20日に開催されましたOkayama ComCamp 2016 powered by MVPsの登壇スライドです。

Published in: Technology
  • Sex in your area is here: ♥♥♥ http://bit.ly/2F7hN3u ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/2F7hN3u ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

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

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

×