Lately, I've been seeing a few too many good apps that fail regularly on an iPhone 3G running OS4.x, but work really well on other devices, and it's made me wonder why? Are these developers starting to get careless about the memory usage of their apps? Are they trying to hold too many large objects in memory instead of saving them to a file or database on the device? Since the difference in specifications between the early devices and the latest devices is larger than it has ever been, it's made me wonder what devices these apps are being tested on.
The original iPhone, iPhone 3G, and the 1st Gen. iPod Touch all have the slowest CPU clocked at 412MHz. Later devices run at 532MHz, 600MHz, 800MHz, and 1GHz.
The original iPhone, iPhone 3G, and the 1st and 2nd Gen. iPod Touch all have the lowest amount of ram at 128MB, and the slowest GPU that can only run OpenGL ES 1.1. Later devices have 256MB and 512MB of ram, and use a GPU that can run OpenGL ES 2.0.
Of the slower devices, only the iPhone 3G and the 2nd Gen. iPod Touch can run OS4.x. Of these two devices, the iPhone 3G has the lowest amount of ram available, the lowest amount of free memory when the phone services are running, and an OS version that uses more cpu and ram resources than earlier versions. So is this the device we should all be testing our apps on? Now might be a good time to pick up a cheap iPhone 3G for a test device.
Obviously, not all apps are going to be able to run on all devices. At the very least there should be a clear warning in the app description if it can't run on an earlier device, or that the performance of the app will be slow enough to affect the usability of the app. An honest warning will cost you less in sales than a bunch of bad reviews from angry

users. If you have any analytics about your app usage, consider the number of existing users that are using older devices. It might be time for a new separate app that requires a faster device, an in-app purchase that enables new features, or just a setting that enables/disables certain features? Or put the performance hogging features into a new app. That way you can charge for the upgrade, while at the same time keep existing users happy with bug fixes, etc.
I'm sure that most developers already take these issues into consideration, so don't take my comments the wrong way. Some developers clearly haven't thought about it much, or are too inexperienced even consider it, so I just wanted to bring it to their attention.
Let me know what you think.