WP7.1アプリによるWP8タイルのサポート

/ 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ベースの編集画面で再度開いて更新すると、追加したセクションが消えてしまうので要注意。

次に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未満)への対策も追加しておきました。
インストールそのものをできないようにする方法もありますが、単なる月間カレンダーをタイルに貼りたいというニーズもあろうかと、自動更新されない旨を表示する確認メッセージを出して、「今日」を示すマークを付けずにタイル作成する形に変えてみました。
ちなみに低メモリ端末判定用のコードはこんな感じ。

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


WP8 SDK & Toolkit

/ Windows Phone

Windows Phone SDK 8.0の正式版がリリースされました。
今回のSDKから開発環境の敷居がかなり上がっていて、Windows 8の64bit版でメモリ4GB以上というミニマムの要件に加え、HYPER-Vを利用するエミュレーターを動かすためにPro以上のエディションが必要になります。
AtomなWin8タブレットではビルドもできないというのはちょっと残念です。

とりあえずRC版のSDKをアンインストールして、早速入れてみました。
RC版ではVS Express for WPという専用のVisual Studio上でしか開発できない状態になっていたのですが、さすがに正式版は既存のVS 2012 Ultimate上にテンプレートが入って普通に使えるようで、Express版もインストールされずに済んだ模様。(Webインストーラ使用)

WP8 SDKは現行版であるWindonws Phone 7.5のSDKも含まれているようなので、試しに手持ちアプリのプロジェクトをビルドしてみたところ、Toolkitが入っていなかったことに気づき、ダウンロードしてこようとチェックしてみたらば、SDKと同時にToolkitもWP8対応版としてバージョンアップされたようで、Silverlight Toolkitと切り離され、Windows Phone Toolkitとして独立した形に変わっておりました。
NuGetを使ったインストールしかできないようなので少々戸惑いましたが、空のソリューションを作ってNuGetでToolkitモジュールを取り込んでから、手持ちアプリの参照先を調整してあげたら普通にビルドできて一安心。

エミュレーターはWP8とWP7.1の両バージョンが提供されているので、WP7.5アプリのプロジェクトではどちらでも動かすことができます。
WP7.5アプリをそのままWP8エミュで動かすと、ライブタイルの大きさの違いで多少タイルの画像がぼやけるものの、機能的には特に問題なく動いていそうです。
WP8エミュは旧エミュとは異なり、最初からピクチャーハブなどの標準アプリが一式組み込まれた状態で起動してくれるので、アプリの動作確認が捗りそうです。
HYPER-V上で動いているせいか、キーボードマウス共有ソフトのMouse without Bordersのスレーブに設定されている状態ではヌルヌルな操作感が再現できずスクロールなどが若干ぎこちなくなってしまいますが、特に問題なく動いています。
ちなみにMwB、スリープや休止からの復帰時に認識しなくなったりして微妙だったのですが、最新版では修正されているようで今は普通に使えています。
実機はまだ当分触れそうにありませんが、エミュレーターは既にしっかり日本語対応もしているので、開発は問題なく行えると思います。
マニフェスト設定をいじるだけでラージサイズのタイルや画像が動くタイプのタイルも作れるようなので、タイル作成系のアプリも相当幅が広がりそうな感じ。
新機能の一覧を見るだけでも出来ることが相当増えているようなので、アプリ開発に関してはこれからが本番かもしれません。


電力使用率・2012夏

/ Windows Phone

遅ればせながら今夏向けに電力使用率アプリをバージョンアップ。


# さりげなく貼ってみたパノラマなスクショですが、作るのはエラく面倒だったりw

それはさておき、暑くなるにつれて電力絡みのサイト訪問者が増えてきたこともあって、久しぶりに各電力会社の「でんき予報」ページを見て回ったところ、いつのまにか電力9社が同一フォーマットのCSVファイルを提供していることが分かったので、急遽アプリの改修を行なった次第。
単純に対応電力会社を増やすだけならば一瞬でできるのですが、全てのデータを読み込むまで何も操作できないのはさすがに難アリということで、データ取得を非同期に行なう改造も入れてあります。
調整が適当ゆえ端末スペックによってはUIがカクカク気味ではありますが、何もできずに延々待たされるよりはマシかと。
それでも、5枚程度ならいざしらず、9枚のパノラマページをめくっていくのはなかなかに大変だったりして、あらためてUIデザインの難しさを痛感しましたが、そこはそれ、無料アプリということでご勘弁を。
実際にアプリを使っていただいている方はご存知とは思いますが、アプリ起動時には前回のアプリ終了時に選んでいたページから順番にロードされていきますので、贔屓(?)の電力会社をチェックするのは前バージョンよりも素早く行えるようになっていると思います。

ちなみにバージョンアップ版は先週公開されたのですが、なにげにMSNの女子向けブログで紹介されているのを発見。
中部電力が表示されない件が書かれていましたが、すみません、いつのまにかCSVのファイル名が変わっていたんですよ…orz
新しいバージョンはしっかり表示されますので許してくださいw
なお、今回新しく追加した電力会社のうち、中国電力、北陸電力、四国電力については平日のみデータ提供しているようで、休日はデータ表示されませんので、あらかじめご承知おきを。

ついでに書いておくと、PCでチェックするときは電気事業連合会のでんき予報ページが各社の情報がまとめて見られて便利です。


Live Calendar +

/ Windows Phone

Live Calendar (日本マーケットではタイルカレンダー) の強化版をリリースしました。
名前はわりとベタに「Live Calendar +」。
カレンダーコントロールの一部を除き、ほぼ全面リメイクで、久々に気合入れて作りました。

今回最大のウリは、Windows Live SDKを利用した予定データの編集機能。
基本的にWindowsPhoneの予定データは標準装備のカレンダーアプリ、もしくはブラウザからしかメンテナンスできないのですが、これをアプリからできるようにしました。
とはいえ、SDKの機能が弱すぎて、今のところかなり基本的な編集しかできないところが悲しかったりするのですが、Live Calendarのレビューで「予定が追加できない」という内容のものが多く寄せられていたこともあったので、現状可能な範囲で実現してみた次第。
月間カレンダーに加えて、予定のライブタイルも作成できるようになったので、簡易的ではあるものの、標準カレンダーの代替としてもご利用いただけるかと思います。
カレンダー本体も、これまで一ヶ月6週の固定表示だったところを、月によって5週表示と6週表示が切り替わるようにしたので、より見やすくなっています。
フォントも選べるようになっていますので、よりオリジナリティのあるカレンダーが作れるかと思います。
設定項目は拡充しやすいように別ページ化したので、今後の拡張もスムーズに行えるかと。

というわけで、今回の目玉は前述の通りなのですが、実装に一番苦労したのはカレンダービューの表示周り。
カレンダーの描画と予定データのロードがわりと重めの処理だったため、なかなかスムーズな動きが実現できず難儀しました。
あれこれ試行錯誤した結果は実際に触って確認してもらえればと思いますが、端末によってもかなり速度差があるようです。
エミュレーターだとサクサクなんですけどねw
今回は久々の有料アプリで、試用版はタイルにトライアルの文字がガッツリ入るようになっていますが、機能的にはフルに試せるので、とりあえず一度お試しを。
世界仕様のため、UIは全て英語表記ですが、カレンダーはリージョンに従って表示されますのでご安心あれ。


Picture Map

/ Windows Phone

ボツネタを大量生産した末に、何とか形になったアプリがリリースされました。
Picture Map」という名前から機能が想像してもらえるとありがたいのですが、位置情報が含まれる写真を地図上に表示するという単機能アプリです。

同種のアプリは各種存在するようだったので、多少なりとも差別化を図るべく、「複数の写真を同時に表示」、「写真のロードをなるべく速く」、「ピクチャーハブからの呼び出しに対応」といった辺りに配慮。

アプリを起動すると、まず端末に格納されている画像の中から位置情報が含まれているものだけをピックアップして一覧表示するのですが、普通にやるとこれが結構待たされるところを別スレッドで処理、ロード中でもUI操作がロックされないようにすることによって、次々と画像がロード・表示されていくそばから選択でき、画像ロードの途中でも地図表示ページに移動することができます。

一方、ピクチャーハブから呼び出す場合は単一の画像を地図表示することになるわけですが、個人的にはこの機能が一押し。
というのも、標準の画像ビューアでは位置情報が記録されていても実際の撮影場所を確認する術がないのですが、本アプリを組み合わせることによってそれが実現できるという、ピクチャーハブの補完という意味でまさにお手本のようなアプリになっているわけです。(なにやら酷い自画自賛になっとりますがw
唯一不満が残る部分は画像のプレビュー機能が弱いことですが、やりすぎるとハマる気配濃厚だったため、今回はオミット。
反響が多ければ今回開発を担当したメンバがアップデートに燃えてくれるかもしれませんw

そんなこんなで、小粒ながらもツボを抑えた良アプリがこさえられたと自負しているわけですが、実は一度審査落ちしてたりします。
理由はLocation Service API利用時のポリシー違反という、よく見かけるパターン。
端末の位置情報を利用するアプリの場合は、プライバシーポリシーの表示や位置情報利用のON/OFF機能といった仕組みが必要になるのですが、Picture MapはGPSによる端末の位置情報は利用していません。
なのに、なぜ?、ホワーイ?
聞けば、なにやら地図にピンを立てるためにGeoCoordinateクラスを利用しているとのこと。
どうやらSystem.Device.Location名前空間に含まれるクラスを利用していると一律このポリシーチェックを受ける可能性がありそうです。
何とかこのまま審査を通す術はないものかと海外フォーラムを調べてみると、AppHub申請時のテスターへの指示欄にて端末位置情報を利用していない旨をテスターに伝えれば良いらしい、という情報を得たので、ダメ元で再申請してみたところ無事に審査通過した次第。
GeoCoordinateWatcherは使用しないけれどもGeoCoordinateクラスは使いたい、といったシチュエーションはわりとありがちなものらしいので、開発している方は覚えておくと役に立つネタかもしれません。

広告無しの無料アプリですので、Windows Phoneで写真を撮られる方は是非ピクチャーハブに忍ばせておいてください。