首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从模拟器(IOS)获取Iphone类型

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

Stack Overflow用户
提问于 2015-11-03 15:43:51
回答 3查看 4.4K关注 0票数 13

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

iOS: How to determine the current iPhone/device model in Swift?

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-03 17:45:57

基于我找到的herehere的答案,我为你写了这个小Swift函数:

代码语言:javascript
复制
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+,这就是我的模拟器设置的值。

There's open source code available that you can use that would convert strings like "iPhone8,2" to the proper iPhone model name

如果你想摆脱使用"DEVICE_IS_SIMULATOR“魔术的编译器警告,here's a better solution in the form of a class

票数 23
EN

Stack Overflow用户

发布于 2018-06-28 05:40:12

从Xcode9.4.1开始,NSProcessInfo().environment现在包含一个用于"SIMULATOR_DEVICE_NAME“的键。值看起来像"iPhone 8“。

票数 5
EN

Stack Overflow用户

发布于 2018-09-04 04:47:59

您还可以使用我的BDLocalizedDevicesModels框架在一行代码中获取名称。在Github上查一下。

它与Objective-C和Swift配合使用,可以帮助您获取真实设备或模拟器的设备名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33493800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档