Not so long ago iPhone development was quite simple, only a few OS versions and even less devices.
Now however, there are 2 major OS versions and 5 different devices to
In my experience, you won't have much compatibility trouble between iPod/iPhone. There are other gotchas to be aware of:
So, what do you need to buy? If you're a serious developer, yes, you should have all 5 devices available. But do you need to test every build on all 5 devices? Does every one of your developers need 5 devices each? No.
One developer can probably test everything that matters with one iPhone 3G and an iPod Touch. Toss in a 3GS and your coverage is probably nearly perfect. (Note that development on 3GS is much nicer just because the CPU is faster, so your apps deploy more quickly.)
At work we have one device per developer, but they're a mix of 3G and iPod devices (and, today, one 3GS).
I don't have much experience with the iPhone itself, but in general this might be a good application of pairwise testing. In practice, you can get 90% coverage with a small fraction of the testing of an exhaustive test pass. Then later if you find certain configurations have gotchas you can add them to your set of configurations and still not need to do an exhaustive pass.
I am not sure if its a best practice. But I have heard many people using ibetatest for exactly what you are looking for. Lots of enthusiastic beta testers out there. You shouldn't have any issues on 95% of your code running on different versions, and something like ibetatest should catch the remaining 5%.
Get all the combinations is the short answer.
I started out with just the iPod, but it's 100MHz faster than the previous iPhone model. My app's performance sensitive, so I'm gonna have to get an old iPhone. I can hardly ask my beta testers (volunteers?) to run the GL performance tool.
I'd suggest a couple things:
you probably will need a range of devices for your own internal testing. As has already been pointed out, there are various differences between each generation of iPod Touch/iPhone
you may want to look into using crowd-sourcing to supplement your internal testing. This potentially allows you to have a bigger audience to test your apps and any cost of using crowd-sourcing is potentially offset by the fact that you can spend less on devices and potentially less on internal testing staff and at the same time, potentially producing a better product. One crowd-sourced test group not mentioned above is uTest.com