Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
605 views
in Technique[技术] by (71.8m points)

swift - How to get the Iphone type from simulator (IOS)

There are a lot of solutions to find out on which device out app is running.

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

But running in the simulator, we just can detect that it is the simulator, but not what type of simulator (iphone5,6,6s etc.)

How can we test different logics depending on devicetype with the simulator ? Or how can I detect which device is simulated in code ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Based on the answers I found here and here, I wrote this little Swift function for you:

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)")
}

I'm getting a result of "iPhone8,2", which converts to an iPhone 6+, which is what my simulator is set to.

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

And if you want to get rid of the compiler warning for using the "DEVICE_IS_SIMULATOR" magic, here's a better solution in the form of a class.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...