On more than one occasion I've seen crashing bugs appear on iOS 3.x due to use of a new call that was introduced in 4.x without proper checking.
Is there a way for Xcode to warn about classes, methods and procedures that are only available a later version than the deployment target?
That way I could easily list through all the code and make sure it's properly conditionalized.
I've actually released something which helps with testing this sort of thing. It's part of my MJGFoundation set of class called MJGAvailability.h.
The way I've been using it is to apply it in my PCH file like this:
#define __IPHONE_OS_VERSION_SOFT_MAX_REQUIRED __IPHONE_4_0
#import "MJGAvailability.h"
// The rest of your prefix header as normal
#import <UIKit/UIKit.h>
Then it'll warn (with perhaps a strange deprecation warning) about APIs which are being used that are too new for the target you set as the "soft max" as per the #define __IPHONE_OS_VERSION_SOFT_MAX_REQUIRED
. Also if you don't define __IPHONE_OS_VERSION_SOFT_MAX_REQUIRED
then it defaults to your deployment target.
I find it useful because I can then double check which APIs I'm using that are too new for the deployment target that I've set.