FrankZp FrankZp - 4 months ago 20
iOS Question

iOS: Preprocessor for OS version check

In the past I used the following preprocessor code to conditionally execute code for different iOS versions:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000
// target is lower than iOS 6.0
#else
// target is at least iOS 6.0
#endif
#endif


However with iOS 7 I have the following problem:

#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
// target is iOS
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000
// target is lower than iOS 7.0
NSLog(@"This message should only appear if iOS version is 6.x or lower");
#else
// target is at least iOS 7.0
#endif
#endif


The
NSLog
message above appears on console under iOS 7. Am I doing something wrong?

EDIT: The following code running under iOS 7 (simulator and device)

NSLog(@"Version %i", __IPHONE_OS_VERSION_MIN_REQUIRED);


gives: Version 60000

Answer

That is the Deployment Target of your app (the minimum version where your app can be installed), not the version where the app is running in the device.

In the settings of your project, you can set that field:

enter image description here

If you change it like this, this input:

NSLog(@"Version %i", __IPHONE_OS_VERSION_MIN_REQUIRED);

Returns 7000

If what you want is to check the actual version of the operative system, I refer you to this question:

Check iPhone iOS Version

But, it's done in runtime, not at compile time.

Comments