My development cycle usually goes like this: (written during the reign of iOS 5)
- Write and Finish and app that works well on my iPad 2 and iPhone 4 on iOS 5. At this point, no regard to what features might be iOS 5 only.
- Check if the app still works on an iPhone 3Gs with iOS 5 (the “worst” possible device)
- See if it even compiles for iOS 4
- Test on iPod Touch 4 with iOS 4.3
- Test on iPhone 3G with iOS 4.1
- Add armv6 and try my original iPod Touch with iOS 3.1.3
It’s worth noting that even my apps that “require” iOS 5 on the store right now did make it to step 6. But being “technically possible” doesn’t always mean ideal. First let’s talk about iDecorate, which I have successfully running on my iPod Touch with 3.1.3 but which requires iOS 5 on the store.
- With only 128MB of RAM, it needed to render at 960×640 rather than 1920×1280 (yet still have a download size that includes the 1920×1280 artwork). I didn’t want to add an asterisk to the description point about full resolutions…
- Only iOS 5 has ways to skin the UI. iOS 4 and 3 only have ways to skin individual elements (i.e. not at the class level). This forces a tradeoff between unnecessary work and appearance.
- The stamp picker had trouble and had to be dumbed down.
- The video-out feature, which is awesome, is missing from all earlier than 4th generation devices.
- The message APIs use new blocks that aren’t suited for iOS 3. This means that to be safe the iOS 3 “version” can’t do any sharing beyond saving to the camera roll.
- Apple threatens rejection of “permanently disabled” controls. Whether they’re serious or not, it implies the right way to handle missing features on older/incompatible devices is to hide them. This exponentiates UI work.
So if between iOS 4 and 5 all that’s missing is tweeting and UI skins, why not build for iOS 4?
- The iOS 4.1 supporting iPhone 3G has the same 128MB of RAM problem that’s much more annoying than writing a few If’s for old APIs.
- Targeting 4.3 means I’m targeting devices that support iOS 5 and I’m really just serving lazy/paranoid individuals and Jailbreakers.
Auto Adjust is very different. It does ONE THING, and the thing it does is much more necessary for older devices. I will always go the extra mile to make sure Auto Adjust works on all iOS devices that Apple will allow with the current SDK. Yes I need to insert that qualifier there. Right now the target list in Xcode only goes back to 3.1, and you have to manually add the armv6 architecture. If Apple makes these impossible with the next version of Xcode or the SDK my hands will be tied.