一、編譯時檢測 1. 判斷 SDK 是否是某個版本或更高版本 2.判斷當前需要支持的最低版本 這個巨集的取值也就是 這個值,也就是你的工程支持的最低系統版本。但是最少是 __IPHONE_2_0。 3.判斷最高可支持的系統版本 這個巨集的值等於當前 SDK 定義的最高版本,比如 \__IPHONE_ ...
一、編譯時檢測
1. 判斷 SDK 是否是某個版本或更高版本
ifdef __IPHONE_11_0
2.判斷當前需要支持的最低版本
__IPHONE_OS_VERSION_MIN_REQUIRED
這個巨集的取值也就是 __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__
這個值,也就是你的工程支持的最低系統版本。但是最少是 __IPHONE_2_0。
3.判斷最高可支持的系統版本
_IPHONE_OS_VERSION_MAX_ALLOWED
這個巨集的值等於當前 SDK 定義的最高版本,比如 __IPHONE_11_3
二、運行時檢測
1.iOS 11.0 SDK 引入的
@available(iOS 11.0, *)
2.iOS 10.0 SDK 之前
NSFoundationVersionNumber (NSFoundationVersionNumber_iOS_9_x_Max)
kCFCoreFoundationVersionNumber (kCFCoreFoundationVersionNumber_iOS_9_x_Max)
以前可以通過這兩個常量來判斷系統,但是10.0以後定義的數值系統並沒有開放出來。
if (NSFoundationVersionNumber > floor(NSFoundationVersionNumber_iOS_9_x_Max)) {
// > iOS 10.0
} else {
// <= iOS 10.0
}
3.UIDevice 方法
NSString *sysVersion = [UIDevice currentDevice].systemVersion
if ([sysVersion compare:@"10.0.3" options:NSNumericSearch] == NSOrderedAscending) {
// > 10.0.3
}
4.NSProcessInfo方法
iOS 8.0 SDK 引入的方法
if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion){.majorVersion = 8, .minorVersion = 3, .patchVersion = 0}]) {
// >= iOS 8.3
} else {
// < iOS 8.3
}