Most popular ▴ See a list of all my posts! The experts got it wrong. Why are there no great Windows 10 apps? How moving the Capital helps Hartlepool. Gender bias calculator The Centre of the UK Defending Uber BusTracker Imagination not needed. Part 1. Imagination not needed. Part 2. Imagination not needed. Part 3. Why Birmingham fails Who is London? Innovation on buses. Heathrow

PDFs and Data ▾ Global open data and PDFs. Improving PDFs for Science. Improving PDFs for Planners. PDFAttacher. A Clearer Plan Hybrid PDFs PDF test-off. PDF Profiler Making PDFs play nicely with data

Housing ▾ Counting households. 1. Counting households. 2. The housing market works (where we let it) Hexmaps Adonis is wrong on housing Car free Birmingham

Regional Growth ▾ Measuring tech in the UK and France in 10 steps. Defending the Zombie graph. Channel 4 must move to Mancheseter Measuring innovation 1: meetups Measuring innovation 2: scientific papers. The UK city-size abnormality. Cities not cheese: why France is productive. How moving the Capital helps Hartlepool. Industrial Strategy. Leeds Growth Strategy 5: Limits. Leeds Growth Strategy 4: Focus. Leeds Growth Strategy 3: Inclusive growth. Leeds Growth Strategy 2: Where to grow? Leeds Growth Strategy 1: Why grow? Imagination not needed. Part 1. Imagination not needed. Part 2. Imagination not needed. Part 3. Inclusive growth. The BBC in Manchester 1 The BBC in Manchester 2 What works (growth) North-South divide: we never tried Imitating Manchester Why Birmingham fails Who is London? Researching research Replacing UK steel The Economist & The North The State of the North, 2015 Move the Lords! Calderdale Digital Strategy Maths of inequality Income by MSOA Heathrow and localism The NorthernPowerhouse Centralism and Santa Claus Yorkshire backwards London makes us poor

Transport ▾ Crossrail 2: Where trust in experts dies. Pacers: crap trains, worth keeping. A Yorkshire transport policy. Stop telling me to learn from London. Fixing it ourselves: bus data in the North. Open fare data will be hard. Transport is too complex! Investment is political London loses when it blocks Leeds' growth The Centre of the UK Defending Uber BusTracker Train time map What works (growth) The Value of Time Innovation on buses. Heathrow 1975 WYMetro Plan

Politics & Economics ▾ GDP measures are like toilets. The UK's private postcodes restrict innovation. Yorkshire could learn from Ireland's success. Alternatives to GDP are a waste of time. Fiscal balance in the UK "Not like London" Innovation takes time to measure Fifa and the right In defence of the € GDP mystery Liberal protectionists 5 types of EU voter Asylum responsibilities STEM vs STEAM The Economist & Scotland BBC Bias? Northern rail consultation What holds us back? Saving the Union Summing it up

Positive ▾ Bike Lights Playful Everywhere Greggs vs. Pret Guardian comment generator Consult less, do more! More things for Leeds! Cartoons PubQuest: Birmingham

Tech ▾ What's holding back opendata in the UK? Anti-trust law saved computing 1 Anti-trust law saved computing 2 Open Data Camp Cardiff Why are there no great Windows 10 apps? Tap to pay. Open Data in Birmingham Defending Uber BusTracker Train time map Building a TechNation How the UK holds back TechNorth GDS is Windows 8 OpenData at the BBC SimFlood SimSponge See me speak Digital Health Leeds Empties Leeds Site Allocations Building a Chrome extension I hate webkit Visualising mental health Microsoft's 5 easy wins Epson px700w reset Stay inside the Bubble

Old/incomplete ▾ Orange price rises The future of University Cherish our Capital Dealing with NIMBYs Sponsoring the tube Gender bias calculator MetNetMaker Malaria PhD Symbian Loops Zwack Kegg Project The EU Eduroam & Windows 8 Where is science vital? The Vomcano 10 things London can shove Holbeck Waterwheel

Last modified: 14 April 2017

Loving and hating UWP

Writing this up and then trying some more things led me to an answer. Here's how you can fix the VS2017 bug that won't let you create Store App Packages.

I write and maintain about a dozen modern Windows 10 apps. We make beer money on public store apps, like PhotoMaps, and real money on enterprise apps for clients and embedded devices, like our Mini Car Counter .

I like the C# programming language, I like the .NET library features, and I like self-contained IDEs like Visual Studio.

When it works, it’s a pleasure. Start a project, write code, press run, and it works on laptop, desktop, phone, raspberry Pi, and more. And as Visual Studio, the Windows Developer Centre, and the UWP platform has improved over the past three years it’s been working more and more often.

UWP still isn’t good enough

But I’m frustrated to say that the UWP process still isn’t good enough.

On Tuesday, Microsoft released its newest update to Windows 10: The Creator’s Update. It’s great, it brings a lot of bug fixes and some new features like 3D Paint and a better Share dialog.

It also replaces the old Nokia-written Maps with a new Microsoft-written Maps. There’s a lot to like in that update; 3D acceleration works better and there are a lot of new styling and projection features that I’m excited to use. But there are also some pretty nasty bugs and they broke PhotoMaps.

Now remember, this app makes me beer money. I think it’s a really good app, we sell a decent number of copies, and have over a thousand downloads with little promotion. We have positive reviews from all over the world giving an average of well over 4 stars. It’s the kind of app that Windows 10 needs more of.

But fixing these bugs and updating my app is torture. There is no way that I can justify the time that it will take as anything but a fan of the platform. And I know that the process for doing the same on Android, and maybe even iOS, would be much easier.

Let me walk you through my pain.

First of all I had to find and fix a bug in my code, caused by an improvement by Microsoft. In PhotoMaps I draw all of the user’s photos that are on the currently visible portion of the map. So I have a function called getBounds that tells me what bits of the map are visible.

The old map control returned a list of four points of a rectangle, so I could take the top-right and bottom-left point to create the rectangle that I'd search for photos in. Easy.

The new map control understands projections and spheres. So it returns a more complicated shape than a rectangle. Thankfully the new update also fixes a buggy method from earlier, GeoboundingBox.TryCompute, and we can use that.

A pretty simple bug. I identified, fixed it, and tested the fix within an hour.

The next bug was a two-hour bug. I tried a lot of things that didn’t work, like checking that I was properly submitting my Bing Maps key to use the MapControl.

Eventually I found that the MapLocationFinder.FindLocationsAsync method has changed a bit. If you ask for one result, it now gives you zero. If you ask for two results, it now gives you one. This feels like a bug to me, but not an unusual one. I can see how that slipped through testing.

Once I found the bug, I fixed the bug. No extra lines of code, I just changed a two to a one and the app worked like before.

The really frustrating stuff

So far, so good. Change is hard, bugs happen, three hours to fix problems in a small project is no problem at all. If I could have just pressed compile and submitted my update to the store I’d have been happy with how I spent those four hours.

But I couldn’t. A day and a half more frustration followed.

Let me give some background first. Creating Windows Store App packages has always been frustrating. Assets are hard to create, package builds fail for unknown and hard to fix reasons, the whole thing is a mess. But eventually, if you delete enough temporary files, restart your computer, and clean the solution enough you could get a build done.

Recently, Microsoft introduced .NET native. This means that instead of a 20s build time, it’s a 5 minute build (Core i7, 2.4Ghz, 8GB RAM, SSD) before you know that something’s wrong. That really slows down bug fixing. And it's bug fixing that shouldn’t be required. These are all problems in the Visual Studio 2017 build chain. In my opininon they're Microsoft's problems not mine.

So here’s the first problem I had, none of the localised languages in my app could complete the compile successfully. I tried a lot of fixes. I reinstalled the Multilingual App Toolkit (Microsoft’s suggested process for localising apps) — still the same. I started a new project and checked that I could compile multilingual apps from that — I could, so it’s a problem with my project. I tried manually updating all the translation files to the new version of Multilingual App Toolkit — still the same.

And remember, each step above requires about 10 builds (5 minutes each) with a new methodical test in between to try and track the problem. I gave it five hours before I gave up and crawled into bed.

The next morning I deleted the other languages. I’m desperate to get this update out because my biggest fans are already complaining that the Windows 10 Creator’s Update has broken an app that they love. I figured that most would be okay with a stable English version for a few weeks, I'll come back and fix the language problem later.

Yet more pain. Now some assets (app logos mostly) weren’t making it into the final store package.

So I tried recompiling my assets using the new tool for asset management in Visual Studio 2017, only to find that it doesn’t create all the assets you need by default.

So I found that, and fixed that, and by this point I was getting really excited…

But I still couldn’t create a Windows Store app package. And remember that every time I make a change, every time I try a new thing, I’m waiting 5 minutes for .NET native compile. It’s infuriating.

So now I’ve spent two full days upgrading my development machine to Creator’s Update, testing just one of my apps, finding two bugs that weren’t really my fault, fixing those bugs, and then trying to compile and submit my app.

And I can’t do it. I’m chasing bug after bug after bug trying to do something that’s never worked properly in three years of UWP development: compile a package for the Store.

I have already spent more billable time on just his one fix than the whole of my revenue from the app. No wonder the app selection on the Windows Store is poor!

Microsoft, this isn’t good enough.

What’s the solution?

I was listening to Windows Weekly earlier. Paul Thurrott had an interesting idea, maybe Microsoft should extend UWP to other platforms so that developers like me can take our existing apps and use the bigger audience to justify investing time and money in improving them. It’s a great idea.

But here’s the problem. The reason I’m not updating and improving my app, and the reason why the hundreds of other developers like me who could fill the Windows Store with great content aren’t doing the same, isn’t because of the small market. 500 million Windows 10 users on the Desktop around the world excites me. The fanbois still using Windows Phone excite me too. I know that with a great app, great marketing support from Microsoft, and a push on our side to localise and advertise better, we could make good money developing for Windows.

But if the basics don’t work, if Visual Studio can’t compile a Store package properly, and if Microsoft’s suggested Multilingual process breaks apps, then I can’t do that. If Microsoft can’t even get this right on Windows, after years of trying, what hope do they have of supporting this on Android?

blog comments powered by Disqus