In the beginning of September 2012 I was called up to come “rescue” a port of a Windows Phone 7 application to a Windows 8 RT NewUI (Metro) application. The project owner was under staffed and in a hurry… This app had to be done in time for the launch of Windows 8 in Stockholm on October 26th. (Later moved to the 25th). The final client was on of the large (if not the largest) retail store chains in Norway ICA/Rimi and their Rimi Pluss service.
Our first deadline was October 1. so there was a lot of work that had to be done before in a very short time. Rimi Pluss already have apps for Iphone, Android and Windows Phone 7 and all the clients is centered around helping you create shopping lists based on dinner recipes and their complete product line. The shopping lists can then be shared between friends and family members.
Luckily most of the planning work had been done in terms of UX and design and because just porting a mobile app to a tablet app is a bad idea, the new Windows app would be more centered around the recipes and as a planning tool for dinner suggestions. We also had some really skilled people from Fullsix in Portugal that came and gave us their insight when it came to UX and design, and what to
We also had a lot of code… that is Windows Phone 7 code that was created in a loose MVVM observable pattern design and the first thing i tried was to copy all the code into my Win 8 app. Not a very good approach :) So what we ended up doing was to copy single methods and logic from the Windows Phone 7 app into the app and porting/upgrading it.
All in all this was a fun job to do and it brought back the fun in desktop development :) But as always, doing development on early platforms can be some pain…. and this one is no different….. One thing that surprised me was how fast I realized that Expression Blend is your friend, typing XAML is something I have never enjoyed much :) I still find XAML to be a bit messy but I guess that is somewhat my own fault, I am not (yet) a XAML ninja, but I’ll revisit my Dojo and become master of it :)
Another “puzzle” was the complete and utter lack of built-in support for databases…. Our first thought was ????? nothing??? what now?? Luckily we found that there acutally was a SQLite library available for Windows Store apps (the project template in Visual Studio 2012 is called Windows Store App, not Windows 8 RT) and through nuget we found sqlite-net. Very helpful and with that we had a code first ORM database responding to LINQ queries.
For the coding itself it was not as much porting as it is rewriting… The ViewModels of the WP7 app was heavily chained with event triggers, sometimes it was almost impossible to follow them all :) Rewriting all of it into async methods that was awaitable was just sheer pleasure. One of the ViewModel classes from the Windows Phone 7 application had 1800 lines of code in it – it was rewritten down to about 400 in the windows 8 application. I felt I had done a real good job that day :)
We also had help from Microsoft in Norway that advised us on the tiny bits… were we following the guidelines for font sizes, types, etc… The overall feeling in the project team was that the app reviewers for the Windows Store was really picky on this kind of stuff.
One thing that I didn’t like about the current stat of Windows Store Apps is that there is limitations to what you can do with your UI controls, things that should be there but looks like it just didn’t make it in time… one of these things is the ability to sort and group data in gridview and listviews. You have to “physically” do that in your data source. – but the new networking api’s more or less make up for it in abundance – working with networked applications in Windows 8 is pure joy :)
Next week I am hired to begin development of my first Windows Phone 8 app. hopefully (Haven’t done any research yet) the whole awaitable async pattern is available there too…. I’ve also decided do do a few more Windows Store Apps on my own, since it is such a new platform and there is a whole range of apps that still hasn’t been created yet and is up for the taking :)