是否有可能在运行时检测到您的iOS应用程序在iPad mini上运行?

Tod*_*orf 13 cocoa-touch objective-c ipad ios ipad-mini

在运行时检测不同的硬件对于分析(其中甚至更有问题的目的)是有用的.

许多iOS应用程序创建者可能有兴趣知道有多少用户在iPad mini上体验他们的应用程序(而不仅仅知道有多少用户在iPad上以1024x768的屏幕分辨率体验他们的应用程序 - 这也很有趣).

是否有任何公共API Cocoa touch/UIKit/ObjC/C可用于检测您的iOS应用程序是否在运行时在iPad mini上运行?理想情况下,此方法应区分iPad 2和iPad mini(具有相同像素数,但像素密度不同).


Post Script:我意识到很多人会考虑在运行时检测iPad mini是一个坏主意.但是,我认为这是一个有效的问题,肯定是或否答案.我认为这个答案对社区有用.

小智 8

如果没有调用未定义的行为并且它没有多余的部分,Boxel的答案会很好.一,+ [NSString stringWithCString:encoding:]需要一个C字符串 - 也就是说,一个NUL终止的字符指针(否则它很可能会转储核心).此外,您不需要转换NSString- 因为sysctlbyname()为您提供了一个普通的旧C字符串(当然没有NUL终结符),您可以直接使用strcmp()以节省几十个CPU周期:

#include <sys/sysctl.h>

size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size + 1);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
machine[size] = 0;

if (strcmp(machine, "iPad2,5") == 0) {
    /* iPad mini */
}

free(machine);
Run Code Online (Sandbox Code Playgroud)

编辑:现在答案也已修复.