Ok I’ve been developing iphone-apps for over a year now,
but there’s this one thing which still really sucks.
Let’s say I want to make my app compatible with iOS 3.0
I set my sdk to the newest version available and set my deployment target to 3.0
But what happens, if you by accident call a function available only in … 3.1.x or later?
Right, it simply crashes.
There are no warnings or indicators telling you, that a function is only available in later iOS-Version. And since the Emulator doesn’t support versions < 4.0 it’s impossible to test if the application really works. You can’t even buy a new device since they already have a newer iOS installed.
And even if you have an older device it’s sometimes almost impossible to check each and every part of your code.
And I really need to support older versions since I know that my customers (around 2/3) still use 3.x versions.
Isn’t there ANY code-analyzer or something that scans the availability of all functions called within the app?
In one case the app crashed because I called
+ (id)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending
which i a convenience method of alloc +
- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending;
(Plus it’s autoreleased)
But sortDescriptorWithKey is only avaible in 4.0 @_@
same question here. The only thing I figured out to set the
Base SDKof Project AND Target to 3.0. Then the compiler will check if you call some not existing methods.But the question for a scanner still exist because the method above throws me some errors when using the ASI HTTP framework. So my procedure is to
Base SDKback tolatest SDK
you probably have to install a SDK 3.0 from previous XCode version. And there is no need to set the target
Base SDKback to latest version. I have once set it to 3.0 and get no errors from ASI HTTP.//EDIT: download links for XCode 3.2.1: Snow Leopard and Leopard