diff options
Diffstat (limited to 'Foundation/GTMSystemVersion.m')
-rw-r--r-- | Foundation/GTMSystemVersion.m | 94 |
1 files changed, 23 insertions, 71 deletions
diff --git a/Foundation/GTMSystemVersion.m b/Foundation/GTMSystemVersion.m index f3a8559..5738d78 100644 --- a/Foundation/GTMSystemVersion.m +++ b/Foundation/GTMSystemVersion.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -17,7 +17,9 @@ // #import "GTMSystemVersion.h" -#import "GTMObjC2Runtime.h" + +#import <objc/message.h> + #if GTM_MACOS_SDK #import <CoreServices/CoreServices.h> #else @@ -51,29 +53,11 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ require_noerr(Gestalt(gestaltSystemVersionMajor, &sGTMSystemVersionMajor), failedGestalt); require_noerr(Gestalt(gestaltSystemVersionMinor, &sGTMSystemVersionMinor), failedGestalt); require_noerr(Gestalt(gestaltSystemVersionBugFix, &sGTMSystemVersionBugFix), failedGestalt); - + return; failedGestalt: ; -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_3 - // gestaltSystemVersionMajor et al are only on 10.4 and above, so they - // could fail when running on 10.3. - SInt32 binaryCodedDec; - OSStatus err = err = Gestalt(gestaltSystemVersion, &binaryCodedDec); - _GTMDevAssert(!err, @"Unable to get version from Gestalt"); - - // Note that this code will return x.9.9 for any system rev parts that are - // greater than 9 (i.e., 10.10.10 will be 10.9.9). This shouldn't ever be a - // problem as the code above takes care of 10.4+. - SInt32 msb = (binaryCodedDec & 0x0000F000L) >> 12; - msb *= 10; - SInt32 lsb = (binaryCodedDec & 0x00000F00L) >> 8; - sGTMSystemVersionMajor = msb + lsb; - sGTMSystemVersionMinor = (binaryCodedDec & 0x000000F0L) >> 4; - sGTMSystemVersionBugFix = (binaryCodedDec & 0x0000000FL); -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_3 - #else // GTM_MACOS_SDK NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *version = nil; @@ -81,7 +65,7 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ // The intent is for this file to be Foundation level, so don't directly // call out to UIDevice, but try to get it at runtime before falling back // to the plist. The problem with using the plist on the Simulator is that - // the path will be on the host system, and give us a MacOS (10.x.y) + // the path will be on the host system, and give us a MacOS (10.x.y) // version number instead of an iOS version number. Class uideviceClass = NSClassFromString(@"UIDevice"); if (uideviceClass) { @@ -98,10 +82,10 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ NSArray *versionInfo = [version componentsSeparatedByString:@"."]; NSUInteger length = [versionInfo count]; - _GTMDevAssert(length > 1 && length < 4, + _GTMDevAssert(length > 1 && length < 4, @"Unparseable version %@", version); sGTMSystemVersionMajor = [[versionInfo objectAtIndex:0] intValue]; - _GTMDevAssert(sGTMSystemVersionMajor != 0, + _GTMDevAssert(sGTMSystemVersionMajor != 0, @"Unknown version for %@", version); sGTMSystemVersionMinor = [[versionInfo objectAtIndex:1] intValue]; if (length == 3) { @@ -130,7 +114,7 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ // software to want this, and it costs a bit to get at startup. // This will mainly be for unit test cases. if (!sBuild) { - NSDictionary *systemVersionPlist + NSDictionary *systemVersionPlist = [NSDictionary dictionaryWithContentsOfFile:kSystemVersionPlistPath]; sBuild = [[systemVersionPlist objectForKey:@"ProductBuildVersion"] retain]; _GTMDevAssert(sBuild, @"Unable to get build version"); @@ -140,63 +124,51 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ } + (BOOL)isBuildLessThan:(NSString*)build { - NSComparisonResult result - = [[self build] compare:build + NSComparisonResult result + = [[self build] compare:build options:NSNumericSearch | NSCaseInsensitiveSearch]; return result == NSOrderedAscending; } - + + (BOOL)isBuildLessThanOrEqualTo:(NSString*)build { - NSComparisonResult result - = [[self build] compare:build + NSComparisonResult result + = [[self build] compare:build options:NSNumericSearch | NSCaseInsensitiveSearch]; return result != NSOrderedDescending; } + (BOOL)isBuildGreaterThan:(NSString*)build { - NSComparisonResult result - = [[self build] compare:build + NSComparisonResult result + = [[self build] compare:build options:NSNumericSearch | NSCaseInsensitiveSearch]; return result == NSOrderedDescending; } + (BOOL)isBuildGreaterThanOrEqualTo:(NSString*)build { - NSComparisonResult result - = [[self build] compare:build + NSComparisonResult result + = [[self build] compare:build options:NSNumericSearch | NSCaseInsensitiveSearch]; return result != NSOrderedAscending; } + (BOOL)isBuildEqualTo:(NSString *)build { - NSComparisonResult result - = [[self build] compare:build + NSComparisonResult result + = [[self build] compare:build options:NSNumericSearch | NSCaseInsensitiveSearch]; return result == NSOrderedSame; } #if GTM_MACOS_SDK + (BOOL)isPanther { -#if defined(__MAC_10_4) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_4 return NO; -#else - return sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor == 3; -#endif } + (BOOL)isTiger { -#if defined(__MAC_10_5) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_5 return NO; -#else - return sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor == 4; -#endif } + (BOOL)isLeopard { -#if defined(__MAC_10_6) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_6 return NO; -#else - return sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor == 5; -#endif } + (BOOL)isSnowLeopard { @@ -208,39 +180,19 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ } + (BOOL)isPantherOrGreater { -#if defined(__MAC_10_3) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_3 return YES; -#else - return (sGTMSystemVersionMajor > 10) || - (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 3); -#endif } + (BOOL)isTigerOrGreater { -#if defined(__MAC_10_4) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_4 return YES; -#else - return (sGTMSystemVersionMajor > 10) || - (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 4); -#endif } + (BOOL)isLeopardOrGreater { -#if defined(__MAC_10_5) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_5 return YES; -#else - return (sGTMSystemVersionMajor > 10) || - (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 5); -#endif } + (BOOL)isSnowLeopardOrGreater { -#if defined(__MAC_10_6) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_6 return YES; -#else - return (sGTMSystemVersionMajor > 10) || - (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 6); -#endif } #endif // GTM_MACOS_SDK @@ -272,9 +224,9 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ architecture = kGTMArch_i386; #endif // __LP64__ #endif // !__POWERPC__ - + #endif // GTM_IPHONE_SDK return architecture; -} +} @end |