确定正在模拟哪个iOS设备

确定正在模拟哪个iOS设备,ios,ios-simulator,Ios,Ios Simulator,提供了一个很好的方法来确定实际使用的设备。但是,当在模拟器上运行时,我想检测我是在视网膜上运行还是在64位版本上运行,以便触发特殊逻辑?您可以通过查看[UIScreen mainScreen].scale的值来确定设备(或模拟器)是否为视网膜。如果是1,那就不是视网膜了。如果是2,那就是视网膜 可能有几种检测64/32位的方法。一种方法是: if (sizeof(CGFloat) == sizeof(double)) { // 64-bit } else { // 32-bit

提供了一个很好的方法来确定实际使用的设备。但是,当在模拟器上运行时,我想检测我是在视网膜上运行还是在64位版本上运行,以便触发特殊逻辑?

您可以通过查看
[UIScreen mainScreen].scale的值来确定设备(或模拟器)是否为视网膜。如果是1,那就不是视网膜了。如果是2,那就是视网膜

可能有几种检测64/32位的方法。一种方法是:

if (sizeof(CGFloat) == sizeof(double)) {
    // 64-bit
} else {
    // 32-bit
}

请注意,这将检查应用程序,而不是设备。32位应用程序将在64位设备上运行。上述代码仅在应用程序构建为支持64位且设备为64位时返回true。

您可以通过检查
[UIScreen mainScreen]
比例来检测设备/模拟器是否为视网膜

要在运行时确定CPU类型,可以使用:

#include <mach/mach_host.h>

对于视网膜,请查看屏幕的比例。对于64位版本,您可以检查以下内容:@John您应该澄清是否要确定当前运行的应用程序是否在32位模式下运行,或者是否要知道设备是否支持64位模式。32位应用程序将在64位设备上以32位模式运行。你关心哪一个?很好。我特别想检查应用程序本身是否以64位运行,即硬件和应用程序都支持64位。换言之,你的答案就是我想要的。
host_basic_info_data_t hostInfo;
mach_msg_type_number_t infoCount;

infoCount = HOST_BASIC_INFO_COUNT;
host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostInfo, &infoCount);

switch (hostInfo.cpu_type) {
    case CPU_TYPE_ARM:
        break;

    case CPU_TYPE_ARM64:
        break;

    case CPU_TYPE_X86:
        break;

    case CPU_TYPE_X86_64:
        break;

    default:
        break;
}