/ Windows Phone


初版リリースから1年半が過ぎ、かれこれ10万ダウンロードを超えている、拙作のWPアプリ「Live Calendar」を久々にメンテナンスしてみました。

主な目的はWindows Phone 8/7.8(面倒なので以下ではWP8と表記)で少し仕様が変わったライブタイルに対応すること。
上の画像を見比べると分かりますが、WP7.1アプリをそのままWP8で動かすと、タイルが少しぼやけて見えます。
これはタイルのサイズが173×173から336×336に変わったため。
手元の端末の解像度は変わらず480×800なので、336×336になっても実際には縮小表示されているわけで、実機で見るとわりと微妙な劣化具合。
そのままでもさしたる問題はないのですが、リハビリを兼ねて修正することにした次第。

そのものズバリな説明は公式リファレンスに書かれているので詳細についてはそちらを見てもらうことにして、ここでは作業全体の流れをまとめておきたいと思います。

まずはマニフェストファイル(WMAppManifest.xml)に下記のセクションを追加するわけですが、いったんテキストベースで編集したマニフェストファイルをGUIベースの編集画面で再度開いて更新すると、追加したセクションが消えてしまうので要注意。

<!-- AppExtraセクションをAppセクションの上に追加 -->
<AppExtra xmlns="" AppPlatformVersion="8.0">
	<Extra Name="Tiles"/>
</AppExtra>
<App>
	...
</App>

次にWP8で動作しているかどうかを判定するための細工を施します。
詳細は前述のサイトにほぼそのまま使えるコードが掲載されていますが、要はバージョン判定用の関数なりプロパティを用意して、処理を分岐させればいいだけです。
WP8向けのオブジェクトを利用する際はリフレクションを利用することになります。

WP8で追加されたFlipTileやCycleTile、IconicTileなどを使うと3サイズ(大、中、小)なタイルに対応できるのですが、Live Calendarの仕様に一番マッチしていると思われたFlipTileが背面タイル表示必須な仕様であったため、使用を断念。
結局、WP7.1と同等仕様のStandardTileを採用したため、デカタイルとチビタイルへの対応は見送っています。

そんなこんなで、コードベースの改修は以上ですが、アプリ自身のプライマリなタイルをよく見ると、こちらも少しぼやけています。
どうやらアプリのタイルもサイズが変わっているようなので、試しにタイル用の画像を336×336サイズに変更してみたところ、WP7.1でもWP8でも正常に表示できたので、こちらも変更することに。
テンプレでApplicationIcon.pngというファイル名になっている小サイズのアイコン画像は62×62→100×100、Background.pngとなっている中サイズの画像は173×173→336×336にサイズアップします。
こういうことがあるので、アイコン画像はあらかじめベクタ形式で用意しておかなきゃいけないということですね。

以上で、主目的である新タイル対応は完了。
さすがにこれだけだと寂しいので、アプリ内で表示されるカレンダーの表示を少し大きくして、5週/6週表示の自動切替を組み込み、見やすさ向上を図りました。
また、低評価のコメントで「タイルが更新されない」というクレームを多数頂戴しているのですが、原因が定かでないため、とりあえずバックグラウンドタスクが動作しない低メモリ端末(512MB未満)への対策も追加しておきました。
インストールそのものをできないようにする方法もありますが、単なる月間カレンダーをタイルに貼りたいというニーズもあろうかと、自動更新されない旨を表示する確認メッセージを出して、「今日」を示すマークを付けずにタイル作成する形に変えてみました。
ちなみに低メモリ端末判定用のコードはこんな感じ。

bool isLowMemory = false;
try
{
	Int64 result = (Int64)Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
	if (result < 94371840L)
		isLowMemory = true;
}
catch
{
}

そんなこんなで、絶賛バージョンアップ申請中なわけですが、OSバージョンのバリエーションが増えるとやはり色々面倒です。



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です