当前位置: 首页 > 面试题库 >

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

隗锐进
2023-03-14
问题内容

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

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

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


问题答案:

根据我在我为您编写了这个小的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”魔术的编译器警告,则可以使用类形式的更好的解决方案。



 类似资料:
  • 我想在Xcode或终端中看到它,但如果我需要使用另一个软件,这不是问题。

  • 我是android开发的新手。只是出于好奇,我想知道是否可以从android模拟器中重新安装.apk文件???

  • 我有Unity 5.0.2P1个人版和Xcode 6.3.1版(6D1002)。 以下是希望重现问题的人的一些步骤: 新的空白Unity项目 IOS播放器设置>SDK版本:Simulator SDK 当应用程序在模拟器中启动时,生成和运行会产生以下结果: 警告:在路径“/users/...(用户名).../library/developer/xcode/deriveddata/unity-ipho

  • 我用的是Xcode 10。没有足够的空间更新到最新的Xcode。所以从苹果网站下载了它,并删除了旧的Xcode。为了腾出更多空间,我删除了所有的缓存、不可用的模拟器、派生数据和不需要的东西。之后安装了新的Xcode 11.3。 我的应用程序已成功构建。但模拟器只显示黑屏。 我试过了 “删除所有内容和设置” 而且还 默认写com。苹果核心模拟器。IndigoFramebufferServices帧缓

  • 问题内容: 我正在使用一些第三方代码,这些代码在给定“ -classpath”命令行参数时不会设置java.class.path,而是仅创建一个类加载器,将命令行中指定的类路径中所有项的所有url添加到类加载器,然后将其设置为上下文类加载器。在我编写的此代码的插件类中,我获得了该类加载器的实例,并且需要以某种方式使用它来获取基础类路径,以便可以在JavaCompiler.getTask(… ),并

  • 朋友们试图在ios实际设备上运行appium脚本,出现以下错误 Eclipse错误: [TestNG]正在运行: /private/var/folders/05/79kfthm94qjd3bngd2l5pv7r0mx69v/T/testng-eclipse--1690789728/testng-customsuite.xml 配置失败:@BeforeClass setUpBeforeClass o