一尘不染

如何从模拟器(IOS)获取Iphone类型

swift

有很多解决方案可以找出应用在哪个设备上运行。

但是在模拟器中运行,我们只能检测到它是模拟器,而不是哪种类型的模拟器(iphone5、6、6s等)。

我们如何使用模拟器根据设备类型测试不同的逻辑?或者如何检测代码中模拟的设备?


阅读 447

收藏
2020-07-07

共1个答案

一尘不染

根据我在我为您编写了这个小的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+,这是我的模拟器设置的。

而且,如果您希望摆脱使用“
DEVICE_IS_SIMULATOR”魔术的编译器警告,则可以使用类形式的更好的解决方案

2020-07-07