[英]Is it possible to detect that your iOS app is running on an iPad mini at runtime?
在運行時檢測不同的硬件對於分析(其中甚至更有問題的目的)是有用的。
許多iOS應用程序創建者可能有興趣知道有多少用戶在iPad mini上體驗他們的應用程序(而不僅僅知道有多少用戶在iPad上以1024x768的屏幕分辨率體驗他們的應用程序 - 這也很有趣)。
Cocoa touch/UIKit/ObjC/C
是否有任何公共API可用於檢測您的iOS應用程序是否在運行時在iPad mini上運行? 理想情況下,此方法應區分iPad 2和iPad mini(具有相同像素數,但像素密度不同)。
Post Script:我意識到很多人會考慮在運行時檢測iPad mini是一個壞主意。 但是,我認為這是一個有效的問題,肯定是或否答案。 我認為這個答案對社區有用。
如果沒有調用未定義的行為並且它沒有多余的部分,Boxel的答案會很好。 一, + [NSString stringWithCString:encoding:]
需要一個C字符串 - 即一個NUL終止的char指針(否則它很可能會轉儲核心)。 此外,您不需要轉換為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);
編輯:現在答案也已修復。
使用sysctlbyname獲取平台字符串,然后將其與此處列出的IPSW前綴字符串進行比較。 看起來目前唯一知名的iPad Mini是“iPad2,5”
例:
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) {
// do something special on the iPad Mini
}
free(machine);
沒有可靠的,面向未來的方法來檢測iPad mini的像素密度。 其他答案建議查看hw.machine
字符串。 但是我們不知道(截至我寫這篇文章的時候)iPad mini蜂窩模型的字符串是什么(雖然我們可以做出有根據的猜測: iPad2,6
可能會有GSM和iPad2,7
可能會有CDMA )。
可以查看hw.machine
字符串進行分析。 但讓它影響你的應用程序的用戶界面是危險的,因為即使是當前iPad mini的iPad2,5
字符串也可能會發生變化。
當iPad 2問世時,wifi模型的字符串是iPad2,1
。 后來(當他們發布iPad 3時), 他們更換了iPad 2硬件並將hw.machine
字符串更改為iPad2,4
,但他們仍將其稱為iPad 2.使用iPad mini也可能發生同樣的事情 - 甚至是iPad 2又來了! 例如,Apple可以發布另一個版本的iPad 2硬件並給它機器字符串iPad2,8
。
導入CoreTelephony.framework。 在設備上試試吧
#import <sys/utsname.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
NSString*
machineName()
{
struct utsname systemInfo;
uname(&systemInfo);
return [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
}
這解決了我到目前為止的目的。 但由於我沒有任何iPad mini,我不知道iPad mini會打印什么。 你能讓我知道嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.