如何从模拟器(IOS)获取Iphonetypes

有很多解决scheme来找出哪些设备应用程序正在运行。

iOS:如何确定Swift中当前的iPhone /设备模型?

但是在模拟器中运行,我们只能检测到它是模拟器,而不是什么types的模拟器(iphone5,6,6s等)

我们如何用模拟器testing不同的逻辑取决于设备types? 或者我如何检测代码中模拟的设备?

基于我在这里和这里find的答案,我为你写了这个小小的Swift函数:

func getPlatformNSString() { #if (arch(i386) || arch(x86_64)) && os(iOS) let DEVICE_IS_SIMULATOR = true #else let DEVICE_IS_SIMULATOR = false #endif var machineSwiftString : String = "" if DEVICE_IS_SIMULATOR == true { // this neat trick is found at http://kelan.io/2015/easier-getenv-in-swift/ if let dir = NSProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] { machineSwiftString = dir } } else { var size : size_t = 0 sysctlbyname("hw.machine", nil, &size, nil, 0) var machine = [CChar](count: Int(size), repeatedValue: 0) sysctlbyname("hw.machine", &machine, &size, nil, 0) machineSwiftString = String.fromCString(machine)! } print("machine is \(machineSwiftString)") } 

我得到了“iPhone8,2”的结果,它转换成iPhone 6+,这是我的模拟器设置。

有可用的开源代码,可以将“ iPhone8,2 ”等string转换为正确的iPhone型号名称 。

如果你想摆脱使用“ DEVICE_IS_SIMULATOR ”魔法的编译器警告, 这里有一个类的更好的解决scheme 。