Skip to content

Instantly share code, notes, and snippets.

@blitzvb
Last active December 28, 2015 23:49
Show Gist options
  • Save blitzvb/7581854 to your computer and use it in GitHub Desktop.
Save blitzvb/7581854 to your computer and use it in GitHub Desktop.
Retrieve the hardware model of the device. #xamarin #ios Last updated : 11/05/13
public enum HardwareVersion
{
iPhone2G,
iPhone3G,
iPhone3Gs,
iPhone4, // retina
iPhone4s,
iPhone5,
iPhone5c,
iPhone5s,
iPod1G,
iPod2G,
iPod3G,
iPod4G, // retina
iPod5G,
Simulator,
iPad1G,
iPad2G,
iPad3G, // retina
iPad4G,
iPad5G, // ipad Air
iPadMini,
iPadMini2G, // ipad mini retina
Unknown
}
[DllImport(MonoTouch.Constants.SystemLibrary)]
static internal extern int sysctlbyname ([MarshalAs(UnmanagedType.LPStr)] string property, IntPtr output, IntPtr oldLen, IntPtr newp, uint newlen);
public static HardwareVersion GetHardwareModel()
{
string HardwareProperty = "hw.machine";
var pLen = Marshal.AllocHGlobal (sizeof(int));
sysctlbyname (HardwareProperty, IntPtr.Zero, pLen, IntPtr.Zero, 0);
var length = Marshal.ReadInt32 (pLen);
if (length == 0) {
Marshal.FreeHGlobal (pLen);
return HardwareVersion.Unknown;
}
var pStr = Marshal.AllocHGlobal (length);
sysctlbyname (HardwareProperty, pStr, pLen, IntPtr.Zero, 0);
var hardwareStr = Marshal.PtrToStringAnsi (pStr);
var ret = HardwareVersion.Unknown;
// determine which hardware we are running
if (hardwareStr == "iPhone1,1")
ret = HardwareVersion.iPhone2G;
else if (hardwareStr == "iPhone1,2")
ret = HardwareVersion.iPhone3G;
else if (hardwareStr == "iPhone2,1")
ret = HardwareVersion.iPhone3Gs;
else if (hardwareStr == "iPhone3,1")
ret = HardwareVersion.iPhone4;
else if (hardwareStr == "iPhone4,1")
ret = HardwareVersion.iPhone4s;
else if (hardwareStr == "iPhone5,1" || hardwareStr == "iPhone5,2")
ret = HardwareVersion.iPhone5;
else if (hardwareStr == "iPhone5,3" || hardwareStr == "iPhone5,4")
ret = HardwareVersion.iPhone5c;
else if (hardwareStr == "iPhone6,1" || hardwareStr == "iPhone6,2")
ret = HardwareVersion.iPhone5s;
else if (hardwareStr == "iPod1,1")
ret = HardwareVersion.iPod1G;
else if (hardwareStr == "iPod2,1")
ret = HardwareVersion.iPod2G;
else if (hardwareStr == "iPod3,1")
ret = HardwareVersion.iPod3G;
else if (hardwareStr == "iPod4,1")
ret = HardwareVersion.iPod4G;
else if (hardwareStr == "iPod5,1")
ret = HardwareVersion.iPod5G;
else if (hardwareStr == "iPad1,1")
ret = HardwareVersion.iPad1G;
else if (hardwareStr == "iPad2,1")
ret = HardwareVersion.iPad2G;
else if (hardwareStr == "iPad3,1")
ret = HardwareVersion.iPad3G;
else if (hardwareStr == "iPad3,4" || hardwareStr == "iPad3,5" || hardwareStr == "iPad3,6")
ret = HardwareVersion.iPad4G;
else if (hardwareStr == "iPad2,5" || hardwareStr == "iPad2,6" || hardwareStr == "iPad2,7")
ret = HardwareVersion.iPadMini;
else if (hardwareStr == "i386" || hardwareStr == "x86_64" || hardwareStr == "x86_32")
ret = HardwareVersion.Simulator;
else {
Console.WriteLine ("HardwareVersion.Unknown {0}",ret);
}
// cleanup
Marshal.FreeHGlobal (pLen);
Marshal.FreeHGlobal (pStr);
return ret;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment