dannycabrera/Get-iOS-Model

Mapping from model to chip type

follesoe opened this issue · 1 comments

I have created a mapping from model to Apple CPU type for all model numbers. Normally this should not be too relevant, but because of issues with Apple Wireless Direct Link, and how this protocol behaves in certain chips (pre A10, which does not have dual Wi-Fi radio), this information is needed in my app.

The data set looks like this:

modelChipMap = new Dictionary<string, AppleChipType>
{
	{ "iPhone1,1", AppleChipType.A4 }, // iPhone
	{ "iPhone1,2", AppleChipType.A4 }, // iPhone 3G
	{ "iPhone2,1", AppleChipType.A4 }, // iPhone 3GS
	{ "iPhone3,1", AppleChipType.A4 }, // iPhone 4 GSM
	{ "iPhone3,2", AppleChipType.A4 }, // iPhone 4 GSM
	{ "iPhone3,3", AppleChipType.A4 }, // iPhone 4 CDMA
	{ "iPhone4,1", AppleChipType.A5 }, // iPhone 4S
	{ "iPhone5,1", AppleChipType.A6 }, // iPhone 5 GSM
	{ "iPhone5,2", AppleChipType.A6 }, // iPhone 5 Global
	{ "iPhone5,3", AppleChipType.A6 }, // iPhone 5C GSM
	{ "iPhone5,4", AppleChipType.A6 }, // iPhone 5C Global,
	{ "iPhone6,1", AppleChipType.A7 }, // iPhone 5S GSM
	{ "iPhone6,2", AppleChipType.A7 }, // iPhone 5S Global
	{ "iPhone7,1", AppleChipType.A8 }, // iPhone 6 Plus
	{ "iPhone7,2", AppleChipType.A8 }, // iPhone 6
	{ "iPhone8,1", AppleChipType.A9 }, // iPhone 6S,
	{ "iPhone8,2", AppleChipType.A9 }, // iPhone 6S Plus,
	{ "iPhone8,4", AppleChipType.A9 }, // iPhone SE,
	{ "iPhone9,1", AppleChipType.A10Fusion }, // iPhone 7
	{ "iPhone9,2", AppleChipType.A10Fusion }, // iPhone 7 Plus
	{ "iPhone9,3", AppleChipType.A10Fusion }, // iPhone 7
	{ "iPhone9,4", AppleChipType.A10Fusion }, // iPhone 7 Plus
	{ "iPhone10,1", AppleChipType.A11Bionic }, // iPhone 8
	{ "iPhone10,2", AppleChipType.A11Bionic }, // iPhone 8 Plus
	{ "iPhone10,3", AppleChipType.A11Bionic }, // iPhone X
	{ "iPhone10,4", AppleChipType.A11Bionic }, // iPhone 8
	{ "iPhone10,5", AppleChipType.A11Bionic }, // iPhone 8 Plus
	{ "iPhone10,6", AppleChipType.A11Bionic }, // iPhone X
	{ "iPhone11,2", AppleChipType.A12Bionic }, // iPhone XS
	{ "iPhone11,4", AppleChipType.A12Bionic }, // iPhone XS Max
	{ "iPhone11,6", AppleChipType.A12Bionic }, // iPhone XS Max
	{ "iPhone11,8", AppleChipType.A12Bionic }, // iPhone XR
	{ "iPad1,1", AppleChipType.A4 }, // iPad
	{ "iPad2,1", AppleChipType.A5 }, // iPad 2 Wi-Fi
	{ "iPad2,2", AppleChipType.A5 }, // iPad 2 GSM
	{ "iPad2,3", AppleChipType.A5 }, // iPad 2 CDMA
	{ "iPad2,4", AppleChipType.A5 }, // iPad 2 Wi-Fi
	{ "iPad2,5", AppleChipType.A5 }, // iPad mini Wi-Fi
	{ "iPad2,6", AppleChipType.A5 }, // iPad mini Wi-Fi + Cellular
	{ "iPad2,7", AppleChipType.A5 }, // iPad mini Wi-Fi + Cellular (MM)
	{ "iPad3,1", AppleChipType.A5 }, // iPad 3 Wi-Fi
	{ "iPad3,2", AppleChipType.A5 }, // iPad 3 Wi-Fi + Cellular (VZ)
	{ "iPad3,3", AppleChipType.A5X }, // iPad 3 Wi-Fi + Cellular
	{ "iPad3,4", AppleChipType.A6X }, // iPad 4 Wi-Fi
	{ "iPad3,5", AppleChipType.A6X }, // iPad 4 Wi-Fi + Cellular
	{ "iPad3,6", AppleChipType.A6X }, // iPad 4 Wi-Fi + Cellular (MM)
	{ "iPad4,1", AppleChipType.A7 }, // iPad Air Wi-Fi
	{ "iPad4,2", AppleChipType.A7 }, // iPad Air Wi-Fi + Cellular
	{ "iPad4,3", AppleChipType.A7 }, // iPad Air Wi-Fi + Cellular (TD-LTE)
	{ "iPad4,4", AppleChipType.A7 }, // iPad mini 2 Wi-Fi
	{ "iPad4,5", AppleChipType.A7 }, // iPad mini 2 Wi-Fi + Cellular
	{ "iPad4,6", AppleChipType.A7 }, // iPad mini 2 Wi-Fi + Cellular (TD-LTE)
	{ "iPad4,7", AppleChipType.A7 }, // iPad mini 3 Wi-Fi
	{ "iPad4,8", AppleChipType.A7 }, // iPad mini 3 Wi-Fi + Cellular
	{ "iPad4,9", AppleChipType.A7 }, // iPad mini 3 Wi-Fi + Cellular (TD-LTE)
	{ "iPad5,1", AppleChipType.A8 }, // iPad mini 4 Wi-Fi
	{ "iPad5,2", AppleChipType.A8 }, // iPad mini 4 Wi-Fi + Cellular
	{ "iPad5,3", AppleChipType.A8X }, // iPad Air 2 Wi-Fi
	{ "iPad5,4", AppleChipType.A8X }, // iPad Air 2 Wi-Fi + Cellular
	{ "iPad6,3", AppleChipType.A9X }, // iPad Pro 9.7" Wi-Fi
	{ "iPad6,4", AppleChipType.A9X }, // iPad Pro 9.7" Wi-Fi + Cellular
	{ "iPad6,7", AppleChipType.A9X }, // iPad Pro 12.9" Wi-Fi
	{ "iPad6,8", AppleChipType.A9X }, // iPad Pro 12.9" Wi-Fi + Cellular
	{ "iPad6,11", AppleChipType.A9 }, // iPad 5th gen Wi-Fi
	{ "iPad6,12", AppleChipType.A9 }, // iPad 5th gen Wi-Fi + Cellular
	{ "iPad7,1", AppleChipType.A10XFusion }, // iPad Pro 12.9" 2nd gen Wi-Fi
	{ "iPad7,2", AppleChipType.A10XFusion }, // iPad Pro 12.9" 2nd gen Wi-Fi + Cellular
	{ "iPad7,3", AppleChipType.A10XFusion }, // iPad Pro 10.5" Wi-Fi
	{ "iPad7,4", AppleChipType.A10XFusion }, // iPad Pro 10.5" Wi-Fi + Cellular
	{ "iPad7,5", AppleChipType.A10XFusion }, // iPad 9.7" 6th gen Wi-Fi
	{ "iPad7,6", AppleChipType.A10XFusion }, // iPad 9.7" 6th gen Wi-Fi + Cellular
	{ "iPad8,1", AppleChipType.A12XBionic }, // iPad Pro 11" Wi-Fi
	{ "iPad8,2", AppleChipType.A12XBionic }, // iPad Pro 11" Wi-Fi
	{ "iPad8,3", AppleChipType.A12XBionic }, // iPad Pro 11" Wi-Fi + Cellular
	{ "iPad8,4", AppleChipType.A12XBionic }, // iPad Pro 11" Wi-Fi + Cellular
	{ "iPad8,5", AppleChipType.A12XBionic }, // iPad Pro 12.9" 3nd gen Wi-Fi
	{ "iPad8,6", AppleChipType.A12XBionic }, // iPad Pro 12.9" 3nd gen Wi-Fi
	{ "iPad8,7", AppleChipType.A12XBionic }, // iPad Pro 12.9" 3nd gen Wi-Fi + Cellular
	{ "iPad8,8", AppleChipType.A12XBionic }, // iPad Pro 12.9" 3nd gen Wi-Fi + Cellular
	{ "iPad11,1", AppleChipType.A12Bionic }, // iPad mini 5 Wi-Fi
	{ "iPad11,2", AppleChipType.A12Bionic }, // iPad mini 5 Wi-Fi + Cellular
	{ "iPad11,3", AppleChipType.A12Bionic }, // iPad Air 3rd gen Wi-Fi
	{ "iPad11,4", AppleChipType.A12Bionic }, // iPad Air 3rd gen Wi-Fi + Cellular
	{ "iPod1,1", AppleChipType.A4 }, // iPod Touch
	{ "iPod2,1", AppleChipType.A4 }, // iPod Touch 2st gen
	{ "iPod3,1", AppleChipType.A4 }, // iPod Touch 3rd gen
	{ "iPod4,1", AppleChipType.A4 }, // iPod Touch 4th gen
	{ "iPod5,1", AppleChipType.A5 }, // iPod Touch 5th gen
	{ "iPod7,1", AppleChipType.A8 }, // iPod Touch 6th gen
	{ "iPod7,1", AppleChipType.A10Fusion }, // iPod Touch 7th gen
};

This could easily be added as property such as Xamarin.iOS.DeviceHardware.ChipType. If you think this would be relevant for this library, I can implement it and send a pull request.

Created this issue first to discuss this possible feature.

Hi @follesoe, apologies for the delayed response. Awesome, please go ahead and send a pull request, would be a great addition. If you don't mind please add an "Unknown" option, that way if an older package is installed on a newer device we can return Unknown. Thanks