有没有办法在Swift中获取设备型号名称(iPhone 4S,iPhone 5,iPhone 5S等)?
我知道有一个名为的属性,UIDevice.currentDevice().model但它只返回设备类型(iPod touch,iPhone,iPad,iPhone模拟器等).
我也知道可以使用这种方法在Objective-C中轻松完成:
#import <sys/utsname.h>
struct utsname systemInfo;
uname(&systemInfo);
NSString* deviceModel = [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
但是我正在Swift中开发我的iPhone应用程序,所以有人可以用同样的方式帮助我在Swift中解决这个问题吗?
我正在制作一款利用iPhone的对等蓝牙功能的游戏(可能还有iPod touch第二代).但是,要阻止用户尝试在iPod 1st和iPhone 2G上播放多人游戏,我需要检查特定的设备型号.
[[UIDevice currentDevice] model]只会告诉我该设备是"iPhone"还是"iPod touch".有没有办法检查特定的设备型号,如:"iPhone 3GS","iPod touch第一代"或类似的东西.
编辑:
UIDevice有一个类别(我认为它是由Erica Sadun创建的,我不赞成它),它使用以下代码来获取特定的设备模型.你可以在这里找到整个类别以及其他有用的东西:https://github.com/erica/uidevice-extension
#include <sys/types.h>
#include <sys/sysctl.h>
@implementation UIDevice (Hardware)
/*
Platforms
iPhone1,1 -> iPhone 1G
iPhone1,2 -> iPhone 3G
iPod1,1 -> iPod touch 1G
iPod2,1 -> iPod touch 2G
*/
- (NSString *) platform
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
free(machine);
return platform;
}
Run Code Online (Sandbox Code Playgroud)
这项工作和使用它的应用程序最近已在AppStore中批准.
我正在编写一个具有不同功能的应用程序,具体取决于iPhone的型号.有没有办法区分iPhone 5和5c 5s?我无法检查显示器,因为它是相同的.提前致谢.
我在我的应用程序中切换了"仅在WiFi上下载".但是,这种切换对于iPod touch或WiFi-iPad来说毫无用处.
有没有办法知道设备是否具有代码中的蜂窝数据功能?将来会发挥作用的东西也会很棒(就像带有3G的iPod touch第五代产品一样).
如何检测用户是否具有标准或缩放模式的iPhone 6 Plus?这可能吗?
在两种情况下,我都尝试过[UIScreen mainScreen].scale它3.0.
例如,iPhone 5的"iPhone5,1"或"iPhone5,2"是什么?有什么区别?
如果有人有iPhone 5,请运行以下代码并显示结果.谢谢.
有很多解决方案可以找出应用程序运行的设备.
iOS:如何确定Swift中当前的iPhone /设备型号?
但是在模拟器中运行,我们只能检测到它是模拟器,而不是什么类型的模拟器(iphone5,6,6s等)
我们如何根据模拟器的devicetype测试不同的逻辑?或者我如何检测代码中模拟的设备?
如何检测用户是否在iPhone 4或3G/3GS上运行应用程序?
我需要检测硬件,而不是iOS版本.
谢谢你的帮助.
对于iPad或iPod touch,有没有办法找出该设备是否有GPS?
额外信用:如果iPad本身没有,但它连接到第三方GPS设备怎么办?我可以确定吗?
是否有我可以检查的构建预处理器宏,用#if或#ifdef来确定我当前的Xcode项目是否是为iPhone或iPad构建的?
编辑
正如几个答案所指出的,通常应用程序是通用的,并且相同的二进制文件可以在两个设备上运行.这些非常相似的设备之间的条件行为应该在运行时而不是编译时解决.