如何判断您的代码是在iPhone还是iPhone3G上运行?

我试图确定我的代码是在iPhone还是iPhone3G上运行。 我第一次尝试使用UIKit中的UIDevice类,但iPhone和iPhone3G返回相同的响应:

NSLog([[UIDevice currentDevice] name]); // Name of the phone as named by user NSLog([[UIDevice currentDevice] uniqueIdentifier]); // A GUID like string NSLog([[UIDevice currentDevice] systemName]); // "iPhone OS" NSLog([[UIDevice currentDevice] systemVersion]); // "2.2.1" NSLog([[UIDevice currentDevice] model]); // "iPhone" on both devices NSLog([[UIDevice currentDevice] localizedModel]); // "iPhone" on both devices 

这些是UIDevice允许您查询的唯一参数。

我在Foundation Framework中看了一下,但还没有find合适的调用。

我确定有一些我可以查询的硬件(比如位置服务中的东西),但是这看起来像是黑客。 有没有人知道确定这个简单的方法?

iPhone运行OS X. 以下是如何在Macintosh桌面上确定您的硬件平台。 这是如何在iPhone上。 这是一样的确切的事情。

简而言之, sysctlbyname("hw.machine", str, sz, 0, 0)会将平台名称写入str 。 对于iPhone和iPhone 3G,这恰好是“iPhone1,1”或“iPhone1,2”。

我不是iPhone开发者,但是检查底层平台而不是平台function几乎总是错误的select。 如果iPhone获得您需要的function,您仍然无法运行。 还有一个机会,你会在下一个iPhone 4.0(或任何它被称为)做出错误的决定。

我的猜测是iPhone上的function不在您的软件所关心的iPhon3G上。 我的build议是查询有关的具体硬件,而不是改变基于平台的软件行为。

例如。 而不是通过询问这是一个iPhone或iPhone3G查询有关GPS的可用性,并从那里去检查GPS的可用性。 这样你的代码就可以在任何平台上运行(iphone / ipod touch / iphone 3G)