WindowsストアアプリをWindows Phoneアプリへ移植してみた

この前、初めて、Windows Phoneアプリを開発してみました。

開発といってもゼロから開発したわけではなく、題名の通り以下のWindowsストアアプリをWindows Phoneに移植しました。

移植先がこちら。

SlideShare Viewer for Windows Phone | Windows Phone アプリ + ゲームストア (日本)



以下、その対応をメモしておきます。

開発用PCのリソース

Windows Phoneアプリの開発には64bitのWindowsが必要になります。デバッグする際に利用するWindows Phoneのエミュレーターが開発PC上のHyper-Vで起動しますので、物理マシンを用意する必要があります。


しかし、私の手元のマシンは2GBしかRAMを積んでいません。
実は以前、Visual Studio 2012でチャレンジした際には、Windows Phoneのエミュレーターがリソース不足で起動できなかったりと、開発がスムーズに進まず結局開発を止めてしまった経緯があります。

しかし、最新のVisual Studio 2013ではエミュレーターの機能が改善したのか、同じマシンでもいくらかスムーズにエミュレータが起動するようになっていました。


といってもスムーズなのは一番小さい4インチのエミュレーターで512MBのWindows Phone仮想マシンの場合だけでした。1024MBマシンは何とか起動する程度で、一番大きい6インチ2048MBマシンは動きませんでした。


Hyper-VマネージャからこれらのWindows Phone仮想マシンの設定を見ることができます。ちなみに、Hyper-Vからメモリの設定を変更しても、仮想マシンを起動することはできませんでした。



とはいえ、512MBのマシンでも動けば最低限の開発はできるので、もし、同じような原因でWindows Phoneのアプリの開発を諦めていた方がいれば、再度チャレンジしてみても良いかもしれません。



Windowsストアアプリからのコード移植

WindowsストアアプリとWindows Phoneアプリは同一アプリ(ユニバーサルアプリ)として開発することもできます。

今回はまだ慣れないところもあったので、別々のアプリとして開発してみました。

元となったWindowsストアアプリ自体がMVVMで開発していたこともあり、既存のソースの大部分をそのまま流用することができました。

Model+ViewModel移植

ViewModelとModelはほとんど流用できました。一部、同名のクラスとメソッドでも引数が違うものがあったくらいです。

例えば、このアプリの場合はSystem.Xml.Linq.XElementを利用しているのですが、その中の以下のメソッド

public static XElement Load(string uri);

Windowsストアアプリの場合はWebのURLを直接引数で渡せるのですが、Windows Phoneの場合はできませんでした。といっても一端Stringに落として、XElement.Parseで引いただけで同じことができたので、とりあえず解決しました。


また、当然ながらWindowsタブレットと比較するとWindows Phoneの方がリソースが限られます。Windowsストアアプリの時にはパフォーマンス重視でメモリを使っていた処理が、Windows Phoneではメモリ不足という部分もありました。それに伴い並列処理なんかをいくつかチューニングしました。


View移植

見た目が全く変わったわりには、思ったよりも流用できた部分が多い印象です。

もちろんデバイスの違いによって画面は異なるのですが、たとえばButtonなどの個別のコンポーネントで見ればXAMLをそのまま流用できるものが多かったです。

ただ、一見流用できても微妙に挙動が異なるものもありました。たとえばScrollViewerのZoomModeプロパティがWindows PhoneではデフォルトDisableだったので、ピンチのズームができなかったりと細かい違いが数カ所ありました。

Windows PhoneならではのPivotを利用したりと、少し新しい知識が必要になる部分もありました。

Pivot使うとWindows Phoneっぽいアプリになります。
http://winblog.blob.core.windows.net/win/sites/3/2011/01/0763.pivots_5F00_thumb_5F00_035E5530.jpg





所要時間

若干機能を削ったとはいえ、コーディングが遅い自分でもコーディング自体は3時間程度で移行できました。他にはストアの準備などで1~2時間くらいだと思います。当初、想定していたよりはずっとスムーズに移行できた印象です。

プラットフォームが異なるにも関わらず、ここまで共通コードで書けると、ユニバーサルアプリとしての開発も現実的にできるのだなと感じました。今度は挑戦してみようと思います。


ストア 認定

最近のWindowsストアは、以前より認定が通りやすくなっているように思います。認定のスピードもアップしていて、アップして数時間後にはストア公開される場合もあるくらいです。Windows Phoneのストアも提出の次の日には認定まで進みました。

ダッシュボードのリンクはこちらです。
https://dev.windowsphone.com/ja-jp/ApplicationList




全体的にWindowsストアアプリの開発ができる人なら、最小限の追加知識だけでWindows Phoneアプリも作れるとわかりました。ちょうど年会費の撤廃がニュースになっているので、この機会に開発を初めてみても良いかもしれません。