ユニバーサル Windows
アプリ入門
2014/5/31 めとべや東京 #4
Micosoft MVP for Client App Dev
大田 一希
自己紹介
▪ 名前
▪ 大田 一希(かずき)
▪ Twitter:@okazuki
▪ 肩書き
▪ Microsoft MVP for Client App Dev
2011/07-2014/06
▪ Blog
▪ かずきのBlog@hatena
http://okazuki.hatenablog.com/
▪ 猫派/犬派
▪ 犬派
▪ 特徴
▪ 左耳が超聞こえづらい
おやくそく事項
▪ 記載の内容は個人の見解であり、所属する企業を代表するものではありませ
ん。
今日のゴール
▪ ユニバーサル Windows アプリ作りの”楽さ”と“辛さ”の共有。
ユニバーサル Windows アプリとは
ユニバーサル Windows アプリとは
▪ 開発者目線
▪ ワンソースでWindows ストアアプリとWindows Phone アプリの開発が出来る
▪ 利用者目線
▪ WindowsストアとWindows Phoneストアで同じアプリに見える
▪ どちらかのストアで購入すると、もう片方でも購入済みになる
▪ 設定情報などのデータが同期される
ユニバーサル Windows アプリのプラットフォーム
▪ Windows ストアアプリでお馴染のWindows ランタイム
Windows Kernel Services
入力、インタラクション、etc… DirectX、メディア、etc…
Windows Runtime
C/C++ C#/VB
XAML
JavaScript
HTML/CSS
PCのWindows ランタイムと, PhoneのWindows ランタイム
▪ 高い互換性
Store app Phone app
固有部分
• SettingFlyout
• AppBar
• SearchBox
• etc…
固有部分
• BackButton
• Pivot
• System Chrome
• etc…
Visual Studioによるサポート
▪ ユニバーサルWindowsアプリは3プロジェクト構成
▪ Windows 8.1用プロジェクト
▪ Windows Phone 8.1用プロジェクト
▪ 共有用プロジェクト
コンパイル時の動作
▪ こうではない
Windows Phone 8.1
Windows
Phone
アプリ
Windows 8.1
ストア
アプリ
参照
参照
Shared(dll)
コンパイル時の動作
▪ 以下のようなイメージでコンパイルされる
※要はソースコードをリンクで追加して共有したのと同じことになる。
Windows 8.1 Shared
ストア
アプリ
Windows Phone 8.1 Shared
Windows
Phone
アプリ
エディタの支援機能
▪ Sharedプロジェクトにあるファイルは、WindowsストアアプリとWindows
Phoneアプリなのか編集中に切り替え可能
#ifディレクティブが切り替わる
デザイナの支援機能
▪ Sharedプロジェクトにあるファイルは、WindowsストアアプリとWindows
Phoneアプリなのか編集中に切り替え可能
ユニバーサルWindowsアプリとは
▪ ストアで同一アプリとして扱える
▪ ローミングデータの共有
▪ どちらかを購入すると両方購入したことになる
▪ 実行環境とVisual Studioの支援
▪ 互換性の高いWindows ランタイム
▪ IDEによるソースコード共有の仕組み
共通化のテクニック
コードの共有
▪ Sharedで定義したクラスをストアアプリ、Phoneアプリで使う
ページ ページ
共有する
クラス
Windows
ストアアプリ
Windows
Phone アプリ
コードの共有
▪ 非互換部分は#ifディレクティブ
▪ Windows ストアアプリのときのみのコード
▪ #if WINDOWS_APP
~
#endif
▪ Windows Phoneアプリのときのみのコード
▪ #if WINDOWS_PHONE_APP
~
#endif
さらに踏み込んだコードの共有
▪ ほぼ共通化。差分はUserControl化
UserControl1 UserControl1
Page
Windows
ストアアプリ
Windows
Phone アプリ
クラス
さらに踏み込んだコードの共有
▪ ヘッダーなどの差異の吸収
▪ 同名のUserControlを個別のプロジェクトに定義する
▪ 一部の見た目の変更
▪ リソースに同名の値を定義する
▪ 見た目の大きな差異
▪ 同名のStyleを個別のプロジェクトに定義する
▪ 共通のリソースの定義
▪ SharedプロジェクトのResourceDictionaryなどに定義する
割と死ぬ非互換!!
▪ *****Picker系, WebAuthenticationBroker死亡
▪ Store
▪ awaitでOK
▪ Phone
▪ 一度Picker系別アプリに移動するため、アプリはサスペンドする。OnActivatedイベントで続きの処理をする
▪ 地図死亡
▪ そもそも別物
▪ AppBar
▪ Store
▪ 普通に使える
▪ Phone
▪ 使えない。CommandBarのみ。TopAppBarプロパティをセットすると死ぬ
まとめ
まとめ
▪ ユニバーサル Windows アプリ
▪ 楽にソースコード共有が出来る仕組み
▪ 高い互換性
▪ ストアでの1つのアプリっぽい演出やローミングデータの共有
▪ 注意点
▪ どこを共有するのか注意しよう(安易に画面を共有すると…)
▪ 非互換は、しっかりあるので非互換部をSharedにおかないように気を付けよう

20140531 めとべや東京4 ユニバーサル アプリ入門