iOSアプリを実行しているデバイスの種類を取得する

iOSアプリから、そのアプリが実行されているデバイス(端末)の種類を取得する方法を紹介する。

用途としては、サーバ連携があるアプリで、実行デバイスの情報を収集する等が考えられる。

<ソースコード>

// 使用するクラスで「<sys/sysctl.h>」をインポートしておく

size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *deviceName = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
free(machine);

NSLog(@"デバイス名:%@", deviceName);

ただし、この方法で得られる結果は、「iPhone6,1」の様な形式である。
この「iPhone6,1」をWeb上に公開されている対応表で、一般的な「iPhone 5S」に変換してやる必要がある。
対応表は新しいデバイスが販売されるたびに更新されるので、メンテナンスの観点から可能であればサーバ側に保持することが望ましい。

執筆時の対応表

得られる結果 対応する機種
iPhone1,1 iPhone
iPhone1,2 iPhone 3G
iPhone2,1 iPhone 3GS
iPhone3,1 iPhone 4 (GSM)
iPhone3,3 iPhone 4 (CDMA)
iPhone4,1 iPhone 4S
iPhone5,1 iPhone 5 (A1428)
iPhone5,2 iPhone 5 (A1429)
iPhone5,3 iPhone 5c (A1456/A1532)
iPhone5,4 iPhone 5c (A1507/A1516/A1529)
iPhone6,1 iPhone 5s (A1433/A1453)
iPhone6,2 iPhone 5s (A1457/A1518/A1530)
iPhone7,1 iPhone 6 Plus
iPhone7,2 iPhone 6
iPad1,1 iPad
iPad2,1 iPad 2 (Wi-Fi)
iPad2,2 iPad 2 (GSM)
iPad2,3 iPad 2 (CDMA)
iPad2,4 iPad 2 (Wi-Fi, revised)
iPad2,5 iPad mini (Wi-Fi)
iPad2,6 iPad mini (A1454)
iPad2,7 iPad mini (A1455)
iPad3,1 iPad (3rd gen, Wi-Fi)
iPad3,2 iPad (3rd gen, Wi-Fi+LTE Verizon)
iPad3,3 iPad (3rd gen, Wi-Fi+LTE AT&T)
iPad3,4 iPad (4th gen, Wi-Fi)
iPad3,5 iPad (4th gen, A1459)
iPad3,6 iPad (4th gen, A1460)
iPad4,1 iPad Air (Wi-Fi)
iPad4,2 iPad Air (Wi-Fi+LTE)
iPad4,3 iPad Air (Rev)
iPad4,4 iPad mini 2 (Wi-Fi)
iPad4,5 iPad mini 2 (Wi-Fi+LTE)
iPad4,6 iPad mini 2 (Rev)
iPad4,7 iPad mini 3 (Wi-Fi)
iPad4,8 iPad mini 3 (A1600)
iPad4,9 iPad mini 3 (A1601)
iPad5,3 iPad Air 2 (Wi-Fi)
iPad5,4 iPad Air 2 (Wi-Fi+LTE)
iPod1,1 iPod touch
iPod2,1 iPod touch (2nd gen)
iPod3,1 iPod touch (3rd gen)
iPod4,1 iPod touch (4th gen)
iPod5,1 iPod touch (5th gen)

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。