diff --git a/README.md b/README.md index a38a2ac..b2c809a 100755 --- a/README.md +++ b/README.md @@ -140,6 +140,12 @@ CocoaPods is a dependency manager for Objective-C, which automates and simplifie iPhoneSE iPhone7 iPhone7Plus + iPhone8 + iPhone8Plus + iPhoneX + iPhoneXS + iPhoneXR + iPhoneXSMax iPad1 iPad2 @@ -168,6 +174,10 @@ CocoaPods is a dependency manager for Objective-C, which automates and simplifie Screen4inch Screen4Dot7inch Screen5Dot5inch + Screen5Dot8inch + Screen6Dot1inch + Screen6Dot5inch + ### Available iOS Version Finder methods ```objective-c + (BOOL)versionEqualTo:(NSString *)version; @@ -206,12 +216,18 @@ Or in Swift: Apple Watch 42mm Series 1 Apple Watch 38mm Series 2 Apple Watch 42mm Series 2 + Apple Watch 38mm Series 3 + Apple Watch 42mm Series 3 + Apple Watch 40mm Series 4 + Apple Watch 44mm Series 4 Simulator ### Targetable screen sizes Screen38mm + Screen40mm Screen42mm + Screen44mm ### Available watchOS Version Finder methods ```objective-c diff --git a/SDVersion-Demo/SDVersion.xcodeproj/project.pbxproj b/SDVersion-Demo/SDVersion.xcodeproj/project.pbxproj index 04680a4..7c21b8b 100755 --- a/SDVersion-Demo/SDVersion.xcodeproj/project.pbxproj +++ b/SDVersion-Demo/SDVersion.xcodeproj/project.pbxproj @@ -543,7 +543,7 @@ 9AA6624019BFABFC0055042F /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0910; + LastUpgradeCheck = 1000; ORGANIZATIONNAME = "Sebastian Dobrincu"; TargetAttributes = { 1FC73CFF1D244B87005F81DA = { @@ -564,7 +564,7 @@ }; 9AA6626019BFABFC0055042F = { CreatedOnToolsVersion = 6.0; - LastSwiftMigration = 0820; + LastSwiftMigration = 1000; TestTargetID = 9AA6624719BFABFC0055042F; }; E2D975171B8265DF00675936 = { @@ -974,12 +974,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -1027,12 +1029,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -1070,7 +1074,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; IBSC_WARNINGS = YES; INFOPLIST_FILE = SDiOSVersion/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.dobrincusebastian.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1086,7 +1090,7 @@ CODE_SIGN_IDENTITY = ""; IBSC_WARNINGS = YES; INFOPLIST_FILE = SDiOSVersion/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = "com.dobrincusebastian.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1114,7 +1118,8 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "SDiOSVersionTests/SDiOSVersionTests-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.2; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SDiOSVersion.app/SDiOSVersion"; }; name = Debug; @@ -1134,7 +1139,8 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.dobrincusebastian.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "SDiOSVersionTests/SDiOSVersionTests-Bridging-Header.h"; - SWIFT_VERSION = 3.0; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.2; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/SDiOSVersion.app/SDiOSVersion"; }; name = Release; diff --git a/SDVersion-Demo/SDiOSVersion/AppDelegate.m b/SDVersion-Demo/SDiOSVersion/AppDelegate.m index e145893..2aaf163 100755 --- a/SDVersion-Demo/SDiOSVersion/AppDelegate.m +++ b/SDVersion-Demo/SDiOSVersion/AppDelegate.m @@ -12,7 +12,11 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. - [[UIApplication sharedApplication] setStatusBarHidden:YES]; + + #if __IPHONE_OS_VERSION_MAX_ALLOWED < 90000 + [[UIApplication sharedApplication] setStatusBarHidden:YES]; + #endif + return YES; } diff --git a/SDVersion-Demo/SDiOSVersion/ViewController.m b/SDVersion-Demo/SDiOSVersion/ViewController.m index 0f1eb30..019bee0 100755 --- a/SDVersion-Demo/SDiOSVersion/ViewController.m +++ b/SDVersion-Demo/SDiOSVersion/ViewController.m @@ -10,6 +10,10 @@ @implementation ViewController +- (BOOL)prefersStatusBarHidden { + return true; +} + - (void)viewDidLoad { [super viewDidLoad]; @@ -36,6 +40,12 @@ - (void)viewDidLoad { NSLog(@"Your screen size is 4.7 inches"); else if([SDVersion deviceSize] == Screen5Dot5inch) NSLog(@"Your screen size is 5.5 inches"); + else if([SDVersion deviceSize] == Screen5Dot8inch) + NSLog(@"Your screen size is 5.8 inches"); + else if([SDVersion deviceSize] == Screen6Dot1inch) + NSLog(@"Your screen size is 6.1 inches"); + else if([SDVersion deviceSize] == Screen6Dot5inch) + NSLog(@"Your screen size is 6.5 inches"); if ([SDVersion isZoomed]) { NSLog(@"Your device is in Zoom Mode!"); @@ -48,5 +58,4 @@ - (void)viewDidLoad { NSLog(@"You're on iOS 9.1 or below! ⏳"); } - @end diff --git a/SDVersion/SDiOSVersion/SDiOSVersion.h b/SDVersion/SDiOSVersion/SDiOSVersion.h index 216e53b..7366cb5 100755 --- a/SDVersion/SDiOSVersion/SDiOSVersion.h +++ b/SDVersion/SDiOSVersion/SDiOSVersion.h @@ -10,7 +10,7 @@ typedef NS_ENUM(NSInteger, DeviceVersion){ UnknownDevice = 0, Simulator = 1, - + iPhone4 = 3, iPhone4S = 4, iPhone5 = 5, @@ -26,29 +26,41 @@ typedef NS_ENUM(NSInteger, DeviceVersion){ iPhone8Plus = 15, iPhoneX = 16, iPhoneSE = 17, - - iPad1 = 18, - iPad2 = 19, - iPadMini = 20, - iPad3 = 21, - iPad4 = 22, - iPadAir = 23, - iPadMini2 = 24, - iPadAir2 = 25, - iPadMini3 = 26, - iPadMini4 = 27, - iPadPro12Dot9Inch = 28, - iPadPro9Dot7Inch = 29, - iPad5 = 30, - iPadPro12Dot9Inch2Gen = 31, - iPadPro10Dot5Inch = 32, - - iPodTouch1Gen = 33, - iPodTouch2Gen = 34, - iPodTouch3Gen = 35, - iPodTouch4Gen = 36, - iPodTouch5Gen = 37, - iPodTouch6Gen = 38 + iPhoneXS = 18, + iPhoneXR = 19, + iPhoneXSMax = 20, + iPhone11 = 20, + iPhone11Pro = 21, + iPhone11ProMax = 22, + + iPad1 = 23, + iPad2 = 24, + iPadMini = 25, + iPad3 = 26, + iPad4 = 27, + iPadAir = 28, + iPadMini2 = 29, + iPadAir2 = 30, + iPadMini3 = 31, + iPadMini4 = 32, + iPadPro12Dot9Inch = 33, + iPadPro9Dot7Inch = 34, + iPad5 = 35, + iPadPro12Dot9Inch2Gen = 36, + iPadPro10Dot5Inch = 37, + iPad6 = 38, + iPad7 = 39, + iPadAir3 = 40, + iPadMini5 = 41, + iPadPro11Inch = 42, + iPadPro12Dot9Inch3Gen = 43, + + iPodTouch1Gen = 44, + iPodTouch2Gen = 45, + iPodTouch3Gen = 46, + iPodTouch4Gen = 47, + iPodTouch5Gen = 48, + iPodTouch6Gen = 49 }; typedef NS_ENUM(NSInteger, DeviceSize){ @@ -57,7 +69,9 @@ typedef NS_ENUM(NSInteger, DeviceSize){ Screen4inch = 2, Screen4Dot7inch = 3, Screen5Dot5inch = 4, - Screen5Dot8inch = 5 + Screen5Dot8inch = 5, + Screen6Dot1inch = 6, + Screen6Dot5inch = 7 }; @interface SDiOSVersion : NSObject diff --git a/SDVersion/SDiOSVersion/SDiOSVersion.m b/SDVersion/SDiOSVersion/SDiOSVersion.m index fcf181c..bc606d1 100755 --- a/SDVersion/SDiOSVersion/SDiOSVersion.m +++ b/SDVersion/SDiOSVersion/SDiOSVersion.m @@ -48,9 +48,17 @@ + (NSDictionary*)deviceNamesByCode @"iPhone10,5" : @(iPhone8Plus), @"iPhone10,3" : @(iPhoneX), @"iPhone10,6" : @(iPhoneX), + @"iPhone11,8" : @(iPhoneXR), + @"iPhone11,2" : @(iPhoneXS), + @"iPhone11,4" : @(iPhoneXSMax), + @"iPhone11,6" : @(iPhoneXSMax), + @"iPhone11,8" : @(iPhoneXR), + @"iPhone12,1" : @(iPhone11), + @"iPhone12,3" : @(iPhone11Pro), + @"iPhone12,5" : @(iPhone11ProMax), @"i386" : @(Simulator), @"x86_64" : @(Simulator), - + //iPads @"iPad1,1" : @(iPad1), @"iPad2,1" : @(iPad2), @@ -89,6 +97,22 @@ + (NSDictionary*)deviceNamesByCode @"iPad7,2" : @(iPadPro12Dot9Inch2Gen), @"iPad7,3" : @(iPadPro10Dot5Inch), @"iPad7,4" : @(iPadPro10Dot5Inch), + @"iPad7,5" : @(iPad6), + @"iPad7,6" : @(iPad6), + @"iPad7,11" : @(iPad7), + @"iPad7,12" : @(iPad7), + @"iPad8,1" : @(iPadPro11Inch), + @"iPad8,2" : @(iPadPro11Inch), + @"iPad8,3" : @(iPadPro11Inch), + @"iPad8,4" : @(iPadPro11Inch), + @"iPad8,5" : @(iPadPro12Dot9Inch3Gen), + @"iPad8,6" : @(iPadPro12Dot9Inch3Gen), + @"iPad8,7" : @(iPadPro12Dot9Inch3Gen), + @"iPad8,8" : @(iPadPro12Dot9Inch3Gen), + @"iPad11,1" : @(iPadMini5), + @"iPad11,2" : @(iPadMini5), + @"iPad11,4" : @(iPadAir3), + @"iPad11,5" : @(iPadAir3), //iPods @"iPod1,1" : @(iPodTouch1Gen), @@ -99,7 +123,7 @@ + (NSDictionary*)deviceNamesByCode @"iPod7,1" : @(iPodTouch6Gen)}; #pragma clang diagnostic pop }); - + return deviceNamesByCode; } @@ -108,22 +132,38 @@ + (DeviceVersion)deviceVersion struct utsname systemInfo; uname(&systemInfo); NSString *code = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; - + DeviceVersion version = (DeviceVersion)[[self.deviceNamesByCode objectForKey:code] integerValue]; - + return version; } + (DeviceSize)resolutionSize { - CGFloat screenHeight = 0; - + DeviceSize deviseSize; + + // iOS > 8 does a better differentiation by using UIScreen.nativeBounds, + // this was not available in earlier versions. The nice thing is that nativeBounds + // really only matters on newer devices (iPhone R and Xs Max report the same UIScreen.bounds value) if ([SDiOSVersion versionGreaterThanOrEqualTo:@"8"]) { - screenHeight = MAX([[UIScreen mainScreen] bounds].size.height, [[UIScreen mainScreen] bounds].size.width); + deviseSize = [self resolutionSizeForIOSGreaterThan8]; } else { - screenHeight = [[UIScreen mainScreen] bounds].size.height; + deviseSize = [self resolutionSizeForIOSLessThan8]; } - + + return deviseSize; +} + ++ (DeviceSize)resolutionSizeForIOSLessThan8 +{ + if ([SDiOSVersion versionGreaterThanOrEqualTo:@"8"]) { + [NSException raise:@"Wrong iOS Version For Checking" format:@"The version of iOS %ld is greater than iOS 8 which is required for this function", (long)[SDiOSVersion version]]; + } + + CGFloat screenHeight = 0; + + screenHeight = [[UIScreen mainScreen] bounds].size.height; + if (screenHeight == 480) { return Screen3Dot5inch; } else if(screenHeight == 568) { @@ -134,8 +174,38 @@ + (DeviceSize)resolutionSize return Screen5Dot5inch; } else if (screenHeight == 812) { return Screen5Dot8inch; + } else if (screenHeight == 896) { + return Screen6Dot1inch; + } else + return UnknownSize; +} + ++ (DeviceSize)resolutionSizeForIOSGreaterThan8 +{ + if ([SDiOSVersion versionLessThan:@"8"]) { + [NSException raise:@"Wrong iOS Version For Checking" format:@"The version of iOS %ld is less than iOS 8 which is required for this function", (long)[SDiOSVersion version]]; + } + + CGFloat screenHeight = 0; + + screenHeight = [[UIScreen mainScreen] nativeBounds].size.height; + + if (screenHeight == 480 || screenHeight == 960) { + return Screen3Dot5inch; + } else if(screenHeight == 1136) { + return Screen4inch; + } else if(screenHeight == 1334) { + return Screen4Dot7inch; + } else if(screenHeight == 2208) { + return Screen5Dot5inch; + } else if (screenHeight == 2436) { + return Screen5Dot8inch; + } else if (screenHeight == 1792) { + return Screen6Dot1inch; + } else if (screenHeight == 2688) { + return Screen6Dot5inch; } else - return UnknownSize; + return UnknownSize; } + (DeviceSize)deviceSize @@ -160,6 +230,8 @@ + (NSString *)deviceSizeName:(DeviceSize)deviceSize @(Screen4Dot7inch) : @"4.7 inch", @(Screen5Dot5inch) : @"5.5 inch", @(Screen5Dot8inch) : @"5.8 inch", + @(Screen6Dot1inch) : @"6.1 inch", + @(Screen6Dot5inch) : @"6.5 inch", }[@(deviceSize)]; } @@ -186,7 +258,13 @@ + (NSString *)deviceNameForVersion:(DeviceVersion)deviceVersion @(iPhone8Plus) : @"iPhone 8 Plus", @(iPhoneX) : @"iPhone X", @(iPhoneSE) : @"iPhone SE", - + @(iPhoneXS) : @"iPhone XS", + @(iPhoneXR) : @"iPhone XR", + @(iPhoneXSMax) : @"iPhone XS Max", + @(iPhone11) : @"iPhone 11", + @(iPhone11Pro) : @"iPhone 11 Pro", + @(iPhone11ProMax) : @"iPhone 11 Pro Max", + @(iPad1) : @"iPad 1", @(iPad2) : @"iPad 2", @(iPadMini) : @"iPad Mini", @@ -198,18 +276,24 @@ + (NSString *)deviceNameForVersion:(DeviceVersion)deviceVersion @(iPadMini3) : @"iPad Mini 3", @(iPadMini4) : @"iPad Mini 4", @(iPadPro9Dot7Inch) : @"iPad Pro 9.7 inch", - @(iPadPro12Dot9Inch) : @"iPad Pro 12.9 inch", + @(iPadPro12Dot9Inch) : @"iPad Pro 12.9 inch 1st Gen", @(iPad5) : @"iPad 5", @(iPadPro10Dot5Inch) : @"iPad Pro 10.5 inch", - @(iPadPro12Dot9Inch2Gen): @"iPad Pro 12.9 inch", - + @(iPadPro12Dot9Inch2Gen): @"iPad Pro 12.9 inch 2nd Gen", + @(iPad6) : @"iPad 6", + @(iPad7) : @"iPad 7", + @(iPadAir3) : @"iPad Air 3rd Gen", + @(iPadMini5) : @"iPad Mini 5", + @(iPadPro11Inch) : @"iPad Pro 11 inch", + @(iPadPro12Dot9Inch3Gen): @"iPad Pro 12.9 inch 3rd Gen", + @(iPodTouch1Gen) : @"iPod Touch 1st Gen", @(iPodTouch2Gen) : @"iPod Touch 2nd Gen", @(iPodTouch3Gen) : @"iPod Touch 3rd Gen", @(iPodTouch4Gen) : @"iPod Touch 4th Gen", @(iPodTouch5Gen) : @"iPod Touch 5th Gen", @(iPodTouch6Gen) : @"iPod Touch 6th Gen", - + @(Simulator) : @"Simulator", @(UnknownDevice) : @"Unknown Device" }[@(deviceVersion)]; @@ -222,7 +306,7 @@ + (BOOL)isZoomed }else if ([self resolutionSize] == Screen4Dot7inch && [UIScreen mainScreen].scale == 3){ return YES; } - + return NO; } diff --git a/SDVersion/SDwatchOSVersion/SDwatchOSVersion.h b/SDVersion/SDwatchOSVersion/SDwatchOSVersion.h index 1cbd6e2..d6b0ea6 100644 --- a/SDVersion/SDwatchOSVersion/SDwatchOSVersion.h +++ b/SDVersion/SDwatchOSVersion/SDwatchOSVersion.h @@ -16,6 +16,8 @@ typedef NS_ENUM(NSInteger, DeviceVersion) { AppleWatch42mmSeries2 = 6, AppleWatch38mmSeries3 = 7, AppleWatch42mmSeries3 = 8, + AppleWatch40mmSeries4 = 9, + AppleWatch44mmSeries4 = 10, Simulator = 0 }; @@ -23,7 +25,9 @@ typedef NS_ENUM(NSInteger, DeviceVersion) { typedef NS_ENUM(NSInteger, DeviceSize) { UnknownSize = 0, Screen38mm = 1, - Screen42mm = 2 + Screen40mm = 2, + Screen42mm = 3, + Screen44mm = 4 }; @interface SDwatchOSVersion : NSObject diff --git a/SDVersion/SDwatchOSVersion/SDwatchOSVersion.m b/SDVersion/SDwatchOSVersion/SDwatchOSVersion.m index 5af019e..07e242c 100644 --- a/SDVersion/SDwatchOSVersion/SDwatchOSVersion.m +++ b/SDVersion/SDwatchOSVersion/SDwatchOSVersion.m @@ -26,6 +26,10 @@ + (NSDictionary*)deviceNamesByCode @"Watch3,2" : @(AppleWatch42mmSeries3), @"Watch3,3" : @(AppleWatch38mmSeries3), @"Watch3,4" : @(AppleWatch42mmSeries3), + @"Watch4,1" : @(AppleWatch40mmSeries4), + @"Watch4,2" : @(AppleWatch44mmSeries4), + @"Watch4,3" : @(AppleWatch40mmSeries4), + @"Watch4,4" : @(AppleWatch44mmSeries4) }; }); @@ -54,6 +58,8 @@ + (NSString *)deviceVersionName:(DeviceVersion)deviceVersion @(AppleWatch42mmSeries2) : @"Apple Watch Series 2 42mm", @(AppleWatch38mmSeries3) : @"Apple Watch Series 3 38mm", @(AppleWatch42mmSeries3) : @"Apple Watch Series 3 42mm", + @(AppleWatch40mmSeries4) : @"Apple Watch Series 4 40mm", + @(AppleWatch44mmSeries4) : @"Apple Watch Series 4 44mm", @(Simulator) : @"Simulator" }[@(deviceVersion)]; } @@ -62,8 +68,12 @@ + (DeviceSize)deviceSize { CGFloat screenHeight = CGRectGetHeight([WKInterfaceDevice currentDevice].screenBounds); - if (screenHeight == 195) { + if (screenHeight == 224) { + return Screen44mm; + } else if (screenHeight == 195) { return Screen42mm; + } else if(screenHeight == 197) { + return Screen40mm; } else if(screenHeight == 170) { return Screen38mm; } else { @@ -76,7 +86,9 @@ + (NSString *)deviceSizeName:(DeviceSize)deviceSize return @{ @(UnknownSize) : @"Unknown Size", @(Screen38mm) : @"38mm", - @(Screen42mm) : @"42mm" + @(Screen40mm) : @"40mm", + @(Screen42mm) : @"42mm", + @(Screen44mm) : @"44mm" }[@(deviceSize)]; }