「ターゲットを変更(Retarget)」機能を使ってWindows 8アプリのプロジェクトをWindows 8.1アプリのプロジェクトに変換する手順を紹介する。
powered by Insider.NET
Windows 8.1(以降、Win 8.1)へのアップデートが10月に開始されると発表され、Windowsストア・アプリの開発もいよいよWin 8.1が視野に入ってきた。Windows 8(以降、Win 8)からのアップデートは無償なので、Win 8.1への更新は急速に進むだろう。
Win 8向けのWindowsストア・アプリ(以降、Win 8アプリ)をWin 8.1にインストールしても動く。動きはするのだが、「特集:次期Windows 8.1&Visual Studio 2013 Preview概説(前編):大きく変わるWindowsストア・アプリ開発 〜 ビュー状態に関連する変更点」で解説したように、ビュー状態に関する問題を抱えてしまう。Win 8.1向けのWindowsストア・アプリ(以降、Win 8.1アプリ)として作り直すべきなのだ。しかし、最初から作り直すのは大変だ。何とかならないだろうか?
そこで本稿では、前述の特集記事でも簡単に触れたが、「ターゲットを変更*1」(Retarget)機能を使ってWin 8アプリのプロジェクトをWin 8.1アプリのプロジェクトに変換する手順を紹介する。
*1 「Retarget」という用語は、Visual Studio 2013(Preview版)の一部では「再ターゲット」と訳されており、MSDNでは「ターゲットを変更」という訳になっている。本稿では「ターゲットを変更」を使っておく。ただし、この訳語はまだ安定していない可能性があるので、原文の「(Retarget)」を要所に付記する。
Win 8アプリを開発するには、Win 8とVisual Studio 2012(以降、VS 2012)が必要である。これらを準備するには、第1回のTIPSを参考にしてほしい。本稿では64bit版Win 8 ProとVS 2012 Express for Windows 8を使用している。
Win 8.1アプリを開発するには、Win 8.1とVisual Studio 2013(以降、VS 2013)が必要である。本稿執筆時点ではまだ製品版は一般公開されておらず、本稿ではWindows 8.1 Pro PreviewとVisual Studio Express 2013 Preview for Windowsを使用する。
今使っているPCにPreview版をインストールして不都合が起きても困るので、Win 8.1は仮想マシンにインストールして試すのがよいだろう。筆者はOracleのVirtualBoxを使ってインストールした*2。
Win 8.1 Previewは「Windows 8.1 Preview のダウンロード」のページから入手できる。64bit版のWin 8.1は、CMPXCHG16Bという命令をサポートしているCPUでないとインストールできないので注意してほしい*3。VS 2013 Previewは「Visual Studio 2013 Preview Downloads」のページからダウンロードできる。なお、Win 8.1 PreviewではMicrosoftアカウントを使う必要があるが、Windowsストア・アプリを開発している皆さんなら、そこは問題にならないだろう。
*2 OracleのVirtualBox: 「Oracle VM VirtualBox」から入手できる。なお、「Guest Additions」をインストールすると画面表示に不都合が出ることもあるようだ。筆者の環境では画面サイズの追加ができなくなり、やむなく「Guest Additions」をアンインストールした。
*3 CMPXCHG16B命令: 64bit CPUがこの命令をサポートしているかは、Windows Sysinternalsの「Coreinfo」というコマンドライン・ツールで確認できる。このツールを実行して、その出力に「Supports CMPXCHG16B instruction」とあれば、サポートされている。サポートされていなければ、32bit版をインストールするしかない。
まず、「ターゲットを変更」する対象になる、簡単なWin 8アプリを作成する。VS 2012で新しいプロジェクトを作る際に、[新しいプロジェクト]ダイアログで[グリッド アプリケーション (XAML)]テンプレートを選んでほしい。そうしたら、ビルドして実行し、動作を確認しておいてもらいたい。このアプリは、3つのビューの間で画面遷移し、どのビューもスナップ状態では画面レイアウトが切り換わる(次の画像)。
このまま「ターゲットを変更」してしまうと、元に戻せなくなる。Win 8のサポートを取りやめるならそれでもよいかもしれないが、通常はWin 8アプリとWin 8.1アプリの2つのプロジェクトに分岐させる。
ここではソリューションのフォルダごとまとめてコピーして、フォルダ名を適当な名前に変更しておこう*4。
*4 ソース・コード管理をしている場合は、ソース・コード・リポジトリ側でWin 8.1アプリ用の分岐を作り、それからローカルにソース・コードを取得する。
それでは、Win 8アプリのプロジェクトをVS 2013で開いてみよう。VS 2013を起動し、メニューの[ファイル]−[プロジェクトを開く]から、先ほど用意したプロジェクトを開く。すると、次の画像のように、「ターゲットを変更」(Retarget)を促すダイアログが出てくる。
[OK]ボタンをクリックしてこのダイアログを閉じると、次の画像のようになる。まだ「ターゲットを変更」は実行されておらず、「ターゲットを変更」の手順を説明したWebページが表示されている。
このとき、VS 2013 Expressではソリューション・エクスプローラにソース・ファイルが表示されず何もできないので、「ターゲットを変更」を実行するしかない。
有償版のVS 2013では、ソース・ファイルが表示され、Win 8アプリとしてビルドできるので、ここでビルドしてちゃんと動くか確認しておこう。実際のプロジェクトでは、必要なライブラリがVS 2013の環境に入っていなかったりして、この段階で結構な数のエラーが出る。先に修正してWin 8アプリとして動作することを確認してから、「ターゲットを変更」に進もう。
いよいよ「ターゲットを変更」(Retarget)を実行する。
VS 2013のソリューション・エクスプローラで変換したいプロジェクトを選び、右クリックのメニューから「Windows 8.1 にターゲットを変更」(Retarget to Windows 8.1)を選ぶ(次の画像)。
すると、次の画像のようなダイログが出てきて確認を求められるので、[OK]ボタンをクリックすると変換が始まる。
Preview版で変換する際には、ここで自動的にWordファイルのダウンロードが始まり、びっくりする。「Optimizing your migrated Windows 8 apps: building better experiences with Windows 8.1 〜 Step-by-step guidance for app builders」というドキュメントであるが、製品版では翻訳されたうえでもう少しスマートな提示方法になっていることを期待したい。
無事に変換が終わると、次の画像のようになる。エラーが出ていなければ、完了だ。今回は、何もエラーは出ないはずである*5。
*5 実際のプロジェクトでは、かなりのエラーが出ると覚悟しておいてほしい。
それではビルドして実行してみよう。スナップ状態も確認してほしい(次の画像)。
スナップしてみると、「あれっ!?」と思われるはずだ。上の画像のように、スナップして幅を最小にしても、画面レイアウトが切り替わらないのである。
上で述べた現象は、ビューの最小幅のデフォルトが500pxであるために起きる。最小幅を320pxに変更すれば、Win 8アプリのときと同様に画面レイアウトが切り換わるようになる。
ビューの最小幅を変更するには、マニフェスト・ファイルをダブル・クリックしてマニフェスト・エディタを開いて作業する。その[アプリケーションUI]タブに[最小幅]というドロップダウンがあり、ビューの最小幅を指定する(次の画像)。デフォルトでは[(設定なし)]になっていて、それは500pxなのだが、[320px]を選ぶことでWin 8アプリのスナップと同じ幅になる。
ビューの最小幅を320pxに変更して実行してみると、次の画像のようになる。
今度は、ビューの幅を狭くしていくと画面のレイアウトが切り替わるだろう(上の画像)。
Win 8アプリと違って、Win 8.1アプリはビューの幅を(最小幅以上であれば)自由に変えられる。そして、「ターゲットを変更」(Retarget)して作ったWin 8.1アプリは、ビューの幅を500px未満にすると、最小幅でなくても画面のレイアウトはスナップ状態に切り替わってしまう。これは、Win 8.1アプリでは、Win 8アプリのビュー状態がシミュレートされており、幅が500px未満ならばスナップ状態だとされるためである。
VS 2013の「ターゲットを変更」(Retarget)機能で、Win 8アプリ・プロジェクトをWin 8.1アプリ・プロジェクトに変換できる。できれば、変換前にVS 2013でビルドして動作を確認しておいた方がよい(それにはVS 2013の有償版が必要)。変換後のビューの最小幅は500pxになっているので、スナップ時に画面レイアウトを切り替えたい場合は、ビューの最小幅を320pxに変更する。
「ターゲットを変更」(Retarget)については、次のドキュメントも参照してほしい。
Copyright© Digital Advantage Corp. All Rights Reserved.