++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

Universal Windows Apps

leave a comment »

ここ数日ブログに書いた話はCTP (Community Technology Preview: 要はアルファ版。リリース版は結構将来の話)なものばかりでしたが。

RC (Release Candidate: リリース間近。重大なバグフィックス除けばほぼそのままリリース)の話も1つ。

Visual Studio 2013 Update 2 RCを入れると、Windows Phone 8.1アプリの開発ができるようになります。

Windows Phone 8.1アプリは、以下で説明していくような意味でWindows 8.1アプリと“同一アプリ”として開発できて、この仕組みを「ユニバーサル アプリ」(universal Windows apps)って呼びます。

ユニバーサル アプリ

Visual Studio上で、(ユニバーサル アプリ)と付いたプロジェクト テンプレートを使って新規プロジェクトを作るか、もしくは、Windows 8.1アプリに対して「Windows Phone 8.1の追加」、Windows Phone 8.1アプリに対して「Windows 8.1の追加」という操作をすると、プロジェクトが以下のような状態になります。

この状態のアプリを「ユニバーサル アプリ」と言うみたい。

ちゃんと、JavaScript版もC++/CX版もあります。

image

image

開発者視点で言うとポイントが4つくらい。

  1. WinRTの互換性向上、Windows 8.1とWindows Phone 8.1でほぼ共通のAPI化
  2. 共有プロジェクト(.shproj)が作れるようになった
  3. PCLの利便性が向上
  4. Win8.1/WinPhone8.1アプリは、Windowsストア上で同一アプリとして扱われる

ほぼ共通のAPI

ユニバーサル アプリといいつつ、実際のところ、胆となるのはWindows 8.1アプリとWindows Phone 8.1アプリのAPI統合みたい。要するに、共通して使える.NET標準APIとWinRT APIが実用レベルに増えた。

やろうと思えばXAMLとかも完全コピペで(後述する共有プロジェクト使えば単一ソースコードで)作れそうな程度には共通っぽい。

個別にXAMLを書くモチベーションは、画面サイズの違いによる再デザインくらい。「Phone版は画面はみ出てもいいや」とか「ViewBox使って単に拡大して画面サイズ合わせればいいや」とかくらいの適当なので良ければ、ほんとうに単一ソースコードで開発できそう(それでストア審査通るかは別として)。

共有プロジェクト

新しいプロジェクト タイプとして、共有プロジェクトができたみたい。上記のスクリーンショットで言うところの、HubApp1.Sharedプロジェクト。

このプロジェクト中に追加したファイルは、Windows 8.1用プロジェクト(HubApp1.Windows)とWindows Phone 8.1用プロジェクト(HubApp1.WindowsPhone)の両方に含まれている扱いを受けるようです。PCL (Portable Class Library)と違って、ライブラリDLLができるとかではなく、ソースコードやリソースがプロジェクト内に含まれるものとしてそれぞれをビルドします。

各ファイルを「リンクとして追加」するのとかPCLとかと比べて何が嬉しいかというと、以下のような感じ。

  • 画像リソースとかのアセットも含めて共有可能
  • XAMLとかリソースのパスが狂って参照できなくなる問題もない
  • #ifdefによる条件コンパイルなども利用可能
  • 管理が楽。個別のプロジェクト側と共有プロジェクト側の間で、D&Dでファイルを移すだけで 個別⇔共有 の切り替え可能

この共有プロジェクトの仕組みを普通に使えるのは、現状ではユニバーサル アプリのみみたい。ただ、ユニバーサル アプリの.csprojファイルの中身を参考にして、自分で.csprojファイルを書き換えれば他のプロジェクトでもファイル共有くらいはできそう(IntelliSenseとかが正しく動く保証がないけども)。

PCLの利便性向上

  • Visual Studio 2013 Express for Windows (無償版、Windowsストア アプリ開発用)からPCLプロジェクトを参照できるように
  • クラス ライブラリ(単一環境用)プロジェクトとPCLプロジェクトを一本化
    • ただし、現状Windowsストア用のみ
      • 「.NET Framework 4.5」のみなPCLは作れないみたい
    • つまり、PCLプロジェクトのターゲットを「Windows 8.1」のみ/「Windows Phone 8.1」のみに設定可能に
      • 代わりに、ターゲットが「Windows 8.1」のみ/「Windows Phone 8.1」のみなプロジェクト テンプレートは廃止
  • PCLプロジェクト内でWinRTを参照可能に
    • プロジェクト テンプレートで「クラス ライブラリ(ユニバーサル アプリ用ポータブル)」を選ぶと、WinRTが参照されてる状態のPCLができる
    • WinRT XAMLコントロールなんかもPCLとして作れるように

現状ではやたらと「Windowsストア用のみ」状態ですけども、「計画としては対応プラットフォームを広げていきたい」とのことらしいので今後に期待。

Windowsストア上では1つのアプリ扱い

上記スクリーンショットの通り、内部的には「2つのプロジェクトでソースコード共有」で、「パッケージ(appx)も2つ作られる」わけですが、これをWindowsストアに上げる際には1つのアプリとして扱ってもらえるそうです。

「1つ」ってのは、以下のような意味合い。

  • 同じアプリIDが割り当てられる
  • 課金の口が共通。有料アプリなら、片方で買えばもう片方でも使える
  • ローミング(OneDrive経由のデータ同期)が共通
  • プッシュ通知(Windows Notification Service)が共通

みんな、「※」と書いただけで「※ただし日本は除く」って意味にとってくれるのはどういうことなの。

Visual Studio 2013 Update 2 RCをインストールすると、Windows Phone 8.1のエミュレーターもついてくるわけですが。エミュレーターでアプリが動いても、実機が世の中に出回ってないことにはねぇ…

とりあえず、de:codeを期待して待っていればいいんでしょうか…

ちなみに、Visual Studio 2013 Update 2 RC自体は日本語対応済みです。各種プロジェクト テンプレート・項目テンプレートもちゃんと日本語。

Written by ufcpp

2014年4月6日 @ 20:53

カテゴリー: .NET, C#

コメントを残す