Does anyone know a way to detect the older set of devices:

  • iPod touch 1G
  • iPhone 2G
  • iPhone 3G
  • iPod touch 2G

From the newer set:

  • iPhone 3GS
  • iPod touch 3G
  • iPad
  • iPhone 4

I have found methods to detect the iPhone 4 and the iPad (using screen size). However, is there a way to tell the iPhone 3GS and the iPod touch 3G from the iPod touch 1G and the iPhone 2G?

Requirements:

  • Being hacky is okay! Just make sure it works /all/ of the time.
  • Performance testing is /not/ accurate enough: but if you can get it to work 100% of the time, that'd be fine.

(Example for the iPhone 2G and iPod touch 1G detection, using a "hidden" method: "iPad and iPhone 3G and later support H.264 Baseline profile 3.1. Earlier versions of iPhone support H.264 Baseline profile 3.0." from https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/AudioandVideoTagBasics/AudioandVideoTagBasics.html).

Edit: There is no way I can get around this requirement: there is no alternative solution besides this detection.

Edit
Report