interesting perspective about Windows 8 developer frustrations
Why are there no great Windows 8 apps? Because of WinRT. A developers view
Let’s face it, there are no great apps for Windows 8 and the number of trashy apps is also very low compared to the Android and iOS ecosystems. Microsoft looks really desperate to bring more apps to the ecosystem. Instead of improving the API and its capabilities Microsoft just generates desperately looking campaigns to improve the apps count. I sometimes wonder if they ever realize that the number of apps is not important when people cannot find the apps they are used to use on Android or iOS in the Windows Store.
So why are there no great Windows 8 apps? I will tell you my opinion and my experience. I tried to develop a few great apps but many of those projects never got done. The reason is the API (WinRT).
Let’s start with something (that should be) trivial. Imagine you want to display HTML files with images, CSS, JS in a WebView. It is a common scenario for displaying downloaded manuals, interactive texts, etc. It can be done on Android, iOS and even on Windows Phone by copying the data to isolated storage and pointing the WebView there. This scenario is impossible in WinRT (at least using C# + XAML, I do not know about HTML5+JS). You can reference files in Isolated Storage (Local / Roaming folders) using the ms-appdata protocol, but the WebView does not work with it. You can use the NavigateToString method to display one HTML file, but all the images, CSS, JS references must be internet URLs, you cannot reference other local files. The only way around this issue is to inline all the CSS, JS and images (as base64) to the html file. Really messy, painful and slow and not really an option if you have JS reading XML files and inserting external images.
Let us continue with something as basic and common as Zip files. Windows 8 offers absolutely no protection of your locally saved files so a client may want to at least use password protected Zip files. The ZipArchive class in WinRT does not support password protected Zip files. No 3rd party Zip library can be compiled in WinRT because of a missing Security namespace. You are out of luck, there is no workaround and it usually is a deal-breaker for a security-conscious client. Do not even get me started on using a custom Stream implementation to encrypt your locally stored files …
Let us assume that you want to create an interactive textbook app like there are a few on iOS. The apps should contain multimedia content like images, video, sounds, Word and Excel documents. You would assume that displaying (or better said previewing) Microsoft Word and Microsoft Excel files on a Microsoft platform would be easy. You should have learned to limit your expectations and always assume the worst by now when dealing with WinRT. You can display Word documents with a component for $199 and Excel sheets with one for $1195.
Do you need your app to display PDF files? There are a few solutions, mainly in beta and each has some flaws. I will write a separate article about rendering PDF files in WinRT but, again, be prepared to spend at least $900 for something that can be done for free on both Android and iOS.
Do not forget about the strange behavior of the Windows Store certification process and the bugs. Let us say you use a FlipView to create a photo gallery. You bind your photos collection to the FlipView and in the DataTemplate use an Image to show the actual photo and a custom control to render the photo’s description in a special way (that the client wants). Nothing special about that, you would do the same in WPF, Silverlight, Windows Phone. The only difference is, that it would work on those platforms, but not on WinRT. The custom control gets created only for the first three photos (maybe some magic constant?) and “cycles” for all the other photos. So the 4th photo has the description of the 1st, the 5th of the 2nd and so on … while the Image is displayed correctly for each photo.
I am really fed up with telling customers who want an (iOS clone) app the magic words “it is not possible in Windows 8″.