Fireflies has been out for less than a day and we’ve already submitted an updated version. Turns out the game crashed on international versions (or, more specifically, versions with a non-English locale). And the title on the phone was wrong, which had not been caught in testing but we caught after submission.
I discovered the issue this morning by looking at comments from the European WP7 Marketplaces. No one could get past the loading screen. The bug was caused by my completely erroneous and ignorant assumption that the XNA SpriteFont used to display an in-game timer would only need numerals, ‘:’, and ‘.’ characters. I had forgotten about the comma character used in many European languages.
Lessons learned:
- Always uncheck “Automatically publish to marketplace after passing testing.” You will invariably find a bug in your submission, and the App Hub currently does not allow you to cancel submissions. Your bug will be sitting on the marketplace for all to see until you can get another version through verification.
- Don’t make assumptions about strings and languages. I attempted to “optimize” my game by removing “unnecessary” characters from the SpriteFont used for numbers. So I traded a few KB of size in exchange for breaking all international versions on release, which may irrecoverably damage my game’s reputation in those markets.
- With XNA, always use the SpriteFont’s default character feature just in case. That way, if you try to render a character not in the SpriteFont, it’ll display the default character rather than throwing an exception. I had the foresight to do this for the strings used in the highscore table, but not the ones used in the UI. There’s no reason not to set a default character for the final release version; that would have turned my crashing bug into a minor font-rendering bug.
- Test your application with other locales, which is easily accomplished with the WP7 emulator. This hadn’t even crossed my mind. I thought, These are unicode strings, I made sure to watch out for strings given by the user, nothing could possibly be wrong. Silly me.
Any one of these would have prevented the crash. Hopefully the updated version will get through testing within the week, before all of Europe thinks I suck at writing code.