Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 592
FrankZp Avatar asked Sep 20 '13 12:09

FrankZp


2 Answers

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:

How to check iOS version?

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

like image 87
Antonio MG Avatar answered Oct 21 '22 20:10

Antonio MG


  #ifdef __AVAILABILITY_INTERNAL__IPHONE_9_0_DEP__IPHONE_9_0
    // you're in Xcode 7.x and can use buggy SDK with ios 9.0 only functionality
        CGFloat iOSVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (iOSVersion>=9) {
        // same good old API that predates brave new post Steve Jobs world of bugs and crashes
    }
  #else
        // you're running Xcode 6.4 or older and should use older API here
  #endif

swift:

    if #available(iOS 13, *) {
        toSearchBar?.isHidden = true
    } else {
        // a path way to discovering how fast UIKit will rot
        // now that there is SwiftUI
    }
like image 40
Anton Tropashko Avatar answered Oct 21 '22 21:10

Anton Tropashko