blog.nambo.jp

iOS端末の機種名を取得/判別する方法

iOS機器の機種は、
[[UIDevice currentDevice] model];
で取得できるのですが、これだと、iPhone, iPod touch, iPhone Simulatorなどの文字列が返ってくるだけなので、それがiPhone 4なのか4Sなのか5なのかと言ったところまで判別することができません。

そこで、以下のような方法でより詳しいモデル名を取得してみました。

1
2
3
4
5
6
7
8
9
10
11
12
#import <sys/sysctl.h>

- (NSString *)platform {
  size_t size;
  sysctlbyname("hw.machine", NULL, &size, NULL, 0);
  char *machine = malloc(size);
  sysctlbyname("hw.machine", machine, &size, NULL, 0);
  NSString *platformName = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
  free(machine);
    
  return platformName;
}

手元のiPhoneでは「iPhone5,2」というstringが返ってきます。
これはiPhone 5のGSM版を指します。

UIDeviceのカテゴリとして実装しておくと便利かもしれませんね。

※ <sys/sysctl.h> をインポートし忘れると、Implicit declaration of function 'sysctlbyname' is invalid in C99というエラーが出ます。