aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMSystemVersion.m
diff options
context:
space:
mode:
Diffstat (limited to 'Foundation/GTMSystemVersion.m')
-rw-r--r--Foundation/GTMSystemVersion.m94
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