Windowsストアアプリ/Phoneアプリで、アプリ自体のバージョン番号やこれに関連する情報を取得する方法を解説する。
powered by Insider.NET
ユニバーサルプロジェクトでアプリを作っているときに、アプリ自身のバージョン番号を取得したいと思ったことはないだろうか? 例えば、バージョン番号を表示したい場合があるだろう。あるいは、バージョン番号を設定ファイルに記録しておいて、バージョンアップ時の特別な処理で利用するといった用途なども考えられる。本稿では、マニフェストで設定したバージョン番号を取得する方法を説明する。なお、本稿のサンプルは「Windows Store app samples:MetroTips #85」からダウンロードできる。
ユニバーサルプロジェクトを使ってユニバーサルWindowsアプリを開発するには、以下の開発環境が必要である。本稿では、無償のVisual Studio Express 2013 for Windowsを使っている。
*1 SLAT対応ハードウェアは、Windows Phone 8.1エミュレーターの実行に必要だ。ただし未対応でも、ソースコードのビルドと実機でのデバッグは可能だ。SLAT対応のチェック方法はMSDNブログの「Windows Phone SDK 8.0 ダウンロードポイント と Second Level Address Translation (SLAT) 対応PCかどうかを判定する方法」を参照。なお、SLAT対応ハードウェアであっても、VM上ではエミュレーターが動作しないことがあるのでご注意願いたい。
*2 事前には「Windows 8.1 Update 1」と呼ばれていたアップデート。スタート画面の右上に検索ボタンが(環境によっては電源ボタンも)表示されるようになるので、適用済みかどうかは簡単に見分けられる。ちなみに公式呼称は「the Windows RT 8.1, Windows 8.1, and Windows Server 2012 R2 update that is dated April, 2014」というようである。
*3 Windows Phone 8.1エミュレーターを使用しないのであれば、32bit版のWindows 8.1でもよい。
*4 マイクロソフトのダウンロードページから誰でも入手できる。
*5 本稿に掲載したコードを試すだけなら、無償のExpressエディションで構わない。Visual Studio Express 2013 Update 2 for Windows(製品版)はマイクロソフトのページから無償で入手できる。Expressエディションはターゲットプラットフォームごとに製品が分かれていて紛らわしいが、Windowsストアアプリの開発には「for Windows」を使う(「for Windows Desktop」はデスクトップで動作するアプリ用)。
本稿では、紛らわしくない限り次の略称を用いる。
Visual Studio 2013 Update 2では、残念なことにVB用のユニバーサルプロジェクトのテンプレートは含まれていない*6。そのため、本稿で紹介するVBのコードはユニバーサルプロジェクトではなく、PCL(ポータブルクラスライブラリ)を使ったプロジェクトのものである*7。
*6 VB用のユニバーサルプロジェクトは、来年にリリースされるといわれているVisual Studio「14」からの提供となるようだ。「Visual Studio UserVoice」(英語)のリクエストに対する、6月18日付けの「Visual Studio team (Product Team, Microsoft)」からの回答による。
*7 Visual Studio 2013 Update 2のVBでユニバーサルWindowsアプリを作る場合のお勧めは、「The Visual Basic Team」のブログ記事(英語)によれば、PCLを使う方法のようである。PCLに置いたものは、コードだけでなくXAML(画面)やリソースディクショナリなども共通に利用できる。そこで別途公開のサンプルコードでも、VBはWindows用/Phone用/共通コード(PCL)の3プロジェクト構成とした。ユニバーサルプロジェクトで作らなくてもユニバーサルWindowsアプリはリリースできるのである(「WinRT/Metro TIPS:ユニバーサルプロジェクトで開発するには?」参照)。
ユニバーサルプロジェクトで作るアプリのバージョン番号には、2種類ある。AssemblyInfoクラスに記述するものと*8、アプリのマニフェストに設定するものだ。後者がパッケージに付けられるバージョン番号であり、Windowsストアアプリでは設定チャームの[アクセス許可]に表示される(次の画像)。
パッケージのバージョン番号は、メジャー/マイナー/ビルド/リビジョンの4つの数字から成っている。既定では「1.0.0.0」から始まり、パッケージを作るたびに自動的にリビジョンがインクリメントされていく。ここでは、後ほど取得結果を確認できるように4つとも異なった数字を設定しておこう(次の画像)。
*8 AssemblyInfoクラスは、C#のプロジェクトでは「Properties」フォルダーの「AssemblyInfo.cs」ファイルに、VBでは「My Project」フォルダーの「AssemblyInfo.vb」ファイルに、それぞれ記述されている。ただし、VBでソリューションエクスプローラーに「AssemblyInfo.vb」ファイルを表示するには、そのプロジェクト(またはプロジェクト中の任意のファイル/フォルダー)を選択した状態でメニューの[プロジェクト]−[すべてのファイルを表示]をオンにしておく必要がある。なお、ここに記述するバージョン番号はアセンブリ(.exe/.dllファイル)ごとに付けられるもので、リフレクションを利用して取得することも可能だ(アセンブリのTypeInfoオブジェクトを取得し、そのAssemblyプロパティのCustomAttributesプロパティを列挙する)。
Packageクラス(Windows.ApplicationModel名前空間)のIdプロパティのVersionプロパティ(=Windows.ApplicationModel名前空間のPackageVersion構造体)を見ればよい。PackageVersion構造体には、メジャー/マイナー/ビルド/リビジョンのそれぞれが符号なし整数型のメンバーとして格納されている。
例えば、メジャー/マイナー/ビルド/リビジョンをピリオドでつないだ文字列として取得するには、次のコードのようにする。
var versionInfo = Windows.ApplicationModel.Package.Current.Id.Version;
string version = string.Format(
"{0}.{1}.{2}.{3}",
versionInfo.Major, versionInfo.Minor,
versionInfo.Build, versionInfo.Revision);
Dim versionInfo = Windows.ApplicationModel.Package.Current.Id.Version
Dim version As String = String.Format(
"{0}.{1}.{2}.{3}",
versionInfo.Major, versionInfo.Minor,
versionInfo.Build, versionInfo.Revision)
上述のPackageクラスからは、パッケージのバージョン以外にもさまざまな情報が取得できる。主なプロパティを次に挙げておく。
以下のプロパティはWindows専用である。Phoneではビルドエラーとなってしまうので注意してほしい。C#の共有プロジェクトで使う場合は「#if」ディレクティブを使って切り分ける必要がある*9。
*9 共有プロジェクトでWindowsとPhoneのコードを切り分ける方法については、「WinRT/Metro TIPS:WindowsとPhoneでロジックを切り分けるには?[ユニバーサルWindowsアプリ開発]」を参照してもらいたい。なお、VBでは共有プロジェクトを利用できないため、別途公開のVBのサンプルコードではこれら3項目を実装していない。
以上のバージョン番号などのプロパティを表示する画面を作成すると、次の画像のようになる*10。
*10 画面にはプロパティの文字列を表示するためのTextBlockコントロール(Windows.UI.Xaml.Controls名前空間)と、ストアロゴ表示用のImageコントロールを配置した。また、各プロパティを文字列として(ストアロゴはUriも)公開するクラスを作成し、コントロールにバインドした。詳しくは、別途公開のサンプルコードをご覧いただきたい。
マニフェストファイルに設定したバージョン番号は、Packageクラスを使って簡単に取得できる。Packageクラスからは、その他にもパッケージに関する情報が取得できるので活用してほしい。
Copyright© Digital Advantage Corp. All Rights Reserved.