SDVersion

CI CocoaPods SPM Platform License

Lightweight Cocoa library for detecting the running device's model and screen size. SDVersion supports **iOS**, **iPadOS**, **watchOS**, **tvOS**, and **macOS** - including all devices from iPhone 4 through iPhone 16, Apple Watch through Series 10 and Ultra 2, Apple TV through 4K 3rd generation, and all Mac models including Apple Silicon (M1 through M4). ## Requirements - iOS 13.0+ / macOS 11.0+ / watchOS 6.0+ / tvOS 13.0+ - Xcode 15.0+ ## Installation ### Swift Package Manager (Recommended) Add SDVersion to your `Package.swift`: ```swift dependencies: [ .package(url: "https://github.com/sebyddd/SDVersion.git", from: "5.0.0") ], targets: [ .target(name: "YourApp", dependencies: [ .product(name: "SDiOSVersion", package: "SDVersion") // or SDMacVersion, SDwatchOSVersion, SDtvOSVersion ]) ] ``` Or in Xcode: File > Add Package Dependencies > Enter the repository URL, then select the appropriate library for your platform. ### CocoaPods ```ruby pod 'SDVersion', '~> 5.0' ``` ### Manual Copy the `SDVersion` folder into your project. ## Usage ### iOS / iPadOS ```objective-c #import "SDVersion.h" // Check for device model if ([SDVersion deviceVersion] == iPhone16Pro) { NSLog(@"You have an iPhone 16 Pro!"); } else if ([SDVersion deviceVersion] == iPadPro13InchM4) { NSLog(@"Nice iPad Pro with M4!"); } // Check for device screen size if ([SDVersion deviceSize] == Screen6Dot7inch) { NSLog(@"You have a 6.7 inch display"); } // Check if screen is in zoom mode if ([SDVersion isZoomed]) { NSLog(@"Device is in Zoom Mode"); } // Get device name NSLog(@"%@", [SDVersion deviceNameString]); // e.g: "iPhone 16 Pro Max" // Check iOS version if ([SDVersion versionGreaterThanOrEqualTo:@"18"]) { NSLog(@"Running iOS 18 or later"); } ``` **Swift:** ```swift import SDiOSVersion // Check for device model if SDiOSVersion.deviceVersion() == .iPhone16Pro { print("You have an iPhone 16 Pro!") } // Check for device screen size if SDiOSVersion.deviceSize() == .Screen6Dot7inch { print("You have a 6.7 inch display") } // Get device name print(SDiOSVersion.deviceNameString()) ``` #### Supported iPhone Models ``` iPhone4, iPhone4S, iPhone5, iPhone5C, iPhone5S iPhone6, iPhone6Plus, iPhone6S, iPhone6SPlus, iPhoneSE iPhone7, iPhone7Plus, iPhone8, iPhone8Plus, iPhoneX iPhoneXS, iPhoneXSMax, iPhoneXR iPhone11, iPhone11Pro, iPhone11ProMax iPhoneSE2, iPhone12Mini, iPhone12, iPhone12Pro, iPhone12ProMax iPhone13Mini, iPhone13, iPhone13Pro, iPhone13ProMax iPhoneSE3, iPhone14, iPhone14Plus, iPhone14Pro, iPhone14ProMax iPhone15, iPhone15Plus, iPhone15Pro, iPhone15ProMax iPhone16, iPhone16Plus, iPhone16Pro, iPhone16ProMax iPhone16e ``` #### Supported iPad Models ``` iPad1 - iPad10, iPadMini - iPadMini7 iPadAir - iPadAir5, iPadAir11InchM2, iPadAir13InchM2 iPadPro9Dot7Inch, iPadPro10Dot5Inch, iPadPro11Inch - iPadPro11Inch4Gen iPadPro12Dot9Inch - iPadPro12Dot9Inch6Gen iPadPro11InchM4, iPadPro13InchM4 ``` #### Supported Screen Sizes ``` Screen3Dot5inch, Screen4inch, Screen4Dot7inch Screen5Dot4inch, Screen5Dot5inch, Screen5Dot8inch Screen6Dot1inch, Screen6Dot3inch, Screen6Dot5inch Screen6Dot7inch, Screen6Dot9inch ``` ### watchOS ```objective-c #import "SDwatchOSVersion.h" if ([SDwatchOSVersion deviceVersion] == AppleWatch46mmSeries10) { NSLog(@"Apple Watch Series 10!"); } if ([SDwatchOSVersion deviceSize] == Screen49mm) { NSLog(@"Apple Watch Ultra size"); } ``` #### Supported Watch Models ``` AppleWatch38mm, AppleWatch42mm (Original) Series 1-3: 38mm/42mm variants Series 4-6: 40mm/44mm variants Series 7-9: 41mm/45mm variants Series 10: 42mm/46mm variants Apple Watch SE (1st & 2nd gen): 40mm/44mm Apple Watch Ultra, Ultra 2: 49mm ``` ### tvOS ```objective-c #import "SDtvOSVersion.h" if ([SDtvOSVersion deviceVersion] == AppleTV4K3rdGen) { NSLog(@"Apple TV 4K 3rd Generation"); } ``` #### Supported Apple TV Models ``` AppleTVHD (4th generation) AppleTV4K1stGen, AppleTV4K2ndGen, AppleTV4K3rdGen ``` ### macOS ```objective-c #import "SDMacVersion.h" // Check device type if ([SDMacVersion deviceVersion] == DeviceVersionMacBookPro) { NSLog(@"MacBook Pro"); } // Check for Apple Silicon if ([SDMacVersion isAppleSilicon]) { NSLog(@"Running on Apple Silicon: %@", [SDMacVersion chipName]); // e.g: "Apple M4 Pro" } // Get chip type if ([SDMacVersion chipType] == ChipTypeM4Max) { NSLog(@"M4 Max chip!"); } // Check screen size if ([SDMacVersion deviceSize] == Mac16Inch) { NSLog(@"16 inch display"); } // Check for Retina if ([SDMacVersion deviceScreenResolution] == DeviceScreenRetina) { NSLog(@"Retina display"); } ``` #### Supported Mac Models ``` DeviceVersionIMac, DeviceVersionMacMini, DeviceVersionMacPro DeviceVersionMacBook, DeviceVersionMacBookAir, DeviceVersionMacBookPro DeviceVersionMacStudio, DeviceVersionXserve ``` #### Supported Chip Types ``` ChipTypeIntel ChipTypeM1, ChipTypeM1Pro, ChipTypeM1Max, ChipTypeM1Ultra ChipTypeM2, ChipTypeM2Pro, ChipTypeM2Max, ChipTypeM2Ultra ChipTypeM3, ChipTypeM3Pro, ChipTypeM3Max ChipTypeM4, ChipTypeM4Pro, ChipTypeM4Max ``` #### Supported Screen Sizes ``` Mac11Inch, Mac12Inch, Mac13Inch, Mac14Inch Mac15Inch, Mac16Inch, Mac17Inch Mac20Inch, Mac21Dot5Inch, Mac24Inch, Mac27Inch ``` ## API Reference ### Common Methods (All Platforms) ```objective-c + (DeviceVersion)deviceVersion; + (BOOL)versionEqualTo:(NSString *)version; + (BOOL)versionGreaterThan:(NSString *)version; + (BOOL)versionGreaterThanOrEqualTo:(NSString *)version; + (BOOL)versionLessThan:(NSString *)version; + (BOOL)versionLessThanOrEqualTo:(NSString *)version; ``` ### iOS Specific ```objective-c + (NSString *)deviceNameForVersion:(DeviceVersion)deviceVersion; + (DeviceSize)resolutionSize; + (DeviceSize)deviceSize; + (NSString *)deviceSizeName:(DeviceSize)deviceSize; + (NSString *)deviceNameString; + (BOOL)isZoomed; ``` ### macOS Specific ```objective-c + (NSString *)deviceVersionString; + (DeviceSize)deviceSize; + (NSString *)deviceSizeName:(DeviceSize)deviceSize; + (NSSize)deviceScreenResolutionPixelSize; + (DeviceScreenResolution)deviceScreenResolution; + (NSString *)deviceScreenResolutionName:(DeviceScreenResolution)resolution; + (BOOL)isAppleSilicon; + (ChipType)chipType; + (NSString *)chipName; ``` ## Privacy SDVersion includes a Privacy Manifest (`PrivacyInfo.xcprivacy`) for App Store compliance. The library uses the `utsname` system call to detect device models, which does not require privacy declarations. ## Contributing See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on adding support for new devices. ## License SDVersion is available under the MIT license. See the [LICENSE](LICENSE) file for more info.