1. I have most iDevice models ever released and very often hand them out to my customers so that they can test my apps on them too. I prefer not to leave any of my devices unable to be handed out
2. it's a definite business / competitive advantage in the AppStore to be the only app in its category to have not only 4.3+, but even 4.0-4.2.1 + armv6 support. Anyone looking for an app in the category on his/her iPhone 3G will only be able to install mine and not those of the competition. I think this is worth the additional effort of separately compiling (for distribution) my apps under Xcode 4.4 for armv6 and manually adding the resulting armv6 binary to the iOS4.3+/armv7/armv7s fat binary produced by Xcode 5.1.
----------
Well,it's their decision. I do consider supporting even iPhone 3G's / iPt2G's even in my latest apps a definitive competitive advantage. And it assumes very little additional effort:
- save all XIB's as 4.6-compatible
- not using iOS5+ features like storyboards or ARC (that's not a problem for me as, my apps having been developed since the iPhone OS 3 days, they're all manually memory-micromanaged and non-Storyboard-based)
- using runtime conditional blocks for iOS6/7-only features (like the above
[NSMutableAttributedString addAttribute:value:range])
- when needed, adding some kind of device model-specific code not to start memory-hungry operations like loading Foursquare images along with the venue names
All this is pretty simple, unless you absolutely need to implement some kind of missing functionality in earlier OS versions. With the above-mentioned
[NSMutableAttributedString addAttribute:value:range] for example, which is damn hard to implement in pre-iOS6 for random HTML input, I've chosen not to bother with trying to parse the markup. That is, I just output unformatted (no bold, no italic etc.) text under iOS4/5.