Probably the second biggest roadblock for developing mobile apps is the cost of hardware (the first, of course, is the time). Devices are expensive and it’s tough to keep up. My current testing livery of devices is actually quite limited. Indeed, some of my devices are not longer supported by their manufacturers or myself.
Despite the difficulty of maintaining an adequate device livery, you need the devices for testing. In a previous post, I mentioned that I’m migrating my app from OpenGL ES 1.1 to OpenGL ES 2.0. All of my currently-supported devices support 2.0 (and in some cases 3.0). That sounds like things should be just fine. Well, they don’t have the exact same graphics card or OS – which will lead to horrible surprises.
I have one older iPod Touch which on iOS 6. Having this particular device saved my bacon for the last release of one of my apps. It turns out that the software ran just find on all of my devices except that iPod Touch. Talk about panic! It wasn’t an easy fix either; it required a rewrite of a major portion of my code to work correctly.
Well, in my testing for parts of my OpenGL ES transition code, I decided to try the old iPod again… and wouldn’t you know, code I thought was working fine rendered completely wrong! It turns out there was a bug in the OpenGL code that apparently didn’t manifest in the newer devices or on the simulator.
Realistically, you can get away with a smaller livery of devices under some conditions. For example, if you don’t use any low-level code and stick with the high-level user interface APIs you’re more likely to still have a stable app on many devices. Getting into the lower-level stuff will likely cause more problems particularly in the short run as you develop, and in the long run when devices you didn’t test start reporting issues.
Just to add to the above, I don’t count the xCode simulator as a device. I have code that works perfectly in the simulator and does not run correctly AT ALL on any device. After all, the simulator is actually MacOS X OS and hardware, not mobile. As a consequence, successful rendering in the simulator will not always translate to a device. The first time you encounter this issue it is a rude awakening. However, it shouldn’t be a surprise since all of Apple’s OpenGL ES debugging tools only work on devices, not the simulator.
This gets back around to why my apps have yet to be ported to Android. I only have a couple devices that use that platform for testing out of the many MANY devices out there… it’s a tad scary…