Created
October 5, 2014 11:46
-
-
Save zats/ad47dab2405189f0be22 to your computer and use it in GitHub Desktop.
Backport of -[NSProcessInfo isOperatingSystemAtLeastVersion:]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@implementation NSProcessInfo (WMLCompatibility) | |
+ (void)wml_addSelector:(SEL)originalSelector implementedWithSelector:(SEL)newSelector { | |
if (![self instancesRespondToSelector:originalSelector]) { | |
Method newMethod = class_getInstanceMethod(self, newSelector); | |
class_addMethod(self, originalSelector, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)); | |
} | |
} | |
+ (void)load { | |
@autoreleasepool { | |
if (![self isSubclassOfClass:[NSProcessInfo class]]) { | |
return; | |
} | |
[self wml_addSelector:@selector(operatingSystemVersion) | |
implementedWithSelector:@selector(wml_operatingSystemVersion)]; | |
[self wml_addSelector:@selector(isOperatingSystemAtLeastVersion:) | |
implementedWithSelector:@selector(wml_isOperatingSystemAtLeastVersion:)]; | |
} | |
} | |
- (NSOperatingSystemVersion)wml_operatingSystemVersion { | |
static NSOperatingSystemVersion version; | |
static dispatch_once_t onceToken; | |
dispatch_once(&onceToken, ^{ | |
NSArray *components = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."]; | |
if (components.count > 0) { | |
version.majorVersion = [components[0] integerValue]; | |
if (components.count >= 2) { | |
version.minorVersion = [components[1] integerValue]; | |
if (components.count >= 3) { | |
version.patchVersion= [components[2] integerValue]; | |
} | |
} | |
} | |
}); | |
return version; | |
} | |
- (BOOL)wml_isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version { | |
NSOperatingSystemVersion myVersion = self.operatingSystemVersion; | |
if (myVersion.majorVersion > version.majorVersion) { | |
return YES; | |
} else if (myVersion.majorVersion == version.majorVersion) { | |
if (myVersion.minorVersion > version.minorVersion) { | |
return YES; | |
} else if (myVersion.minorVersion == version.minorVersion) { | |
return myVersion.patchVersion >= version.patchVersion; | |
} | |
} | |
return NO; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment