我正在尝试确定我的代码是在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中看了一下,但还没有找到合适的电话。
我确信我可以查询一些硬件(例如位置服务中的某些东西),但这看起来像是一个黑客。有谁知道确定这个的简单方法?
答案 0 :(得分:21)
iPhone运行OS X. Here's如何在Macintosh桌面上确定您的硬件平台。 Here's如何在iPhone上使用。这是完全相同的。
简而言之,sysctlbyname("hw.machine", str, sz, 0, 0)
会将平台名称写入str
。对于iPhone和iPhone 3G,这恰好分别是“iPhone1,1”或“iPhone1,2”。
答案 1 :(得分:6)
我不是iPhone开发人员,但检查底层平台而不是平台功能几乎总是错误的选择。如果iPhone获得了您所需的功能,您仍然无法运行。你也有可能在接下来的iPhone 4.0(或其他任何名称)上做出错误的决定。
答案 2 :(得分:0)
我的猜测是iPhone上的功能不在你的软件所关注的iPhon3G上。我的建议是查询该特定硬件,而不是根据平台更改软件行为。
例如。而不是通过询问是否是关于GPS的可用性的iPhone或iPhone3G查询来检查GPS的可用性并从那里开始。这样你的代码就可以在任何平台上运行(iphone / ipod touch / iphone 3G)