【iOS/Objective-c】プラットフォーム情報取得3~Objective-c編~

晒す。ただ、つかれた。

ここを参考にちょっと変えて、Objective-cで書いてある。
Apple iPhone Specs (All iPhone Models): EveryiPhone.com

ま、enumもplatformNameもクライアントで処理しなきゃいけないケースはあんまり思い浮かばない。


typedef NS_ENUM(NSUInteger, Platform) {
    PlatformUnkonwn = 0,
    
    // iPhone
    PlatformiPhone = 100,
    PlatformiPhone3G = 101,
    PlatformiPhone3GS = 102,
    PlatformiPhone4_GSM = 103,
    PlatformiPhone4_RevA = 104,
    PlatformiPhone4_CDMA = 105,
    PlatformiPhone4S = 106,
    PlatformiPhone5_GSM = 107,
    PlatformiPhone5_CDMA = 108,
    PlatformiPhone5c_GSM = 109,
    PlatformiPhone5c_CDMA = 110,
    PlatformiPhone5s_GSM = 111,
    PlatformiPhone5s_CDMA = 112,
    PlatformiPhone6Plus = 113,
    PlatformiPhone6 = 114,
    
    // iPod
    PlatformiPodTouch1G = 200,
    PlatformiPodTouch2G = 201,
    PlatformiPodTouch3G = 202,
    PlatformiPodTouch4G = 203,
    PlatformiPodTouch5G = 204,
    
    // iPad
    PlatformiPad_Wifi = 300,
    PlatformiPad2_WiFi = 301,
    PlatformiPad2_GSM = 302,
    PlatformiPad2_CDMA = 303,
    PlatformiPad2_RevA = 304,
    PlatformiPadMini_WiFi = 305,
    PlatformiPadMini_GSM = 306,
    PlatformiPadMini_CDMA = 307,
    PlatformiPad3_WiFi = 308,
    PlatformiPad3_GSM = 309,
    PlatformiPad3_CDMA = 310,
    PlatformiPad4_WiFi = 311,
    PlatformiPad4_GSM = 312,
    PlatformiPad4_CDMA = 313,
    PlatformiPadAir_WiFi = 314,
    PlatformiPadAir_Cellular = 315,
    PlatformiPadAir_China = 316,
    PlatformiPadMini2_WiFi = 317,
    PlatformiPadMini2_Cellular = 318,
    PlatformiPadMini2_China = 319,
    PlatformiPadMini3_WiFi = 320,
    PlatformiPadMini3_Cellular = 321,
    PlatformiPadMini3_China = 322,
    PlatformiPadAir2_WiFi = 323,
    PlatformiPadAir2_Cellular = 324,
    
    // AppleTV
    PlatformAppleTV1G = 401,
    PlatformAppleTV2G = 402,
    
    // Simulator
    Platformi386Simulator = 501,
    Platformx86_64Simulator = 502,
};

- (Platform)platform
{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
    free(machine);
    
    if ([platform isEqualToString:@"iPhone1,1"])
        return PlatformiPhone;
    else if ([platform isEqualToString:@"iPhone1,2"])
        return PlatformiPhone3G;
    else if ([platform isEqualToString:@"iPhone2,1"])
        return PlatformiPhone3GS;
    else if ([platform isEqualToString:@"iPhone3,1"])
        return PlatformiPhone4_GSM;
    else if ([platform isEqualToString:@"iPhone3,2"])
        return PlatformiPhone4_RevA;
    else if ([platform isEqualToString:@"iPhone3,3"])
        return PlatformiPhone4_CDMA;
    else if ([platform isEqualToString:@"iPhone4,1"])
        return PlatformiPhone4S;
    else if ([platform isEqualToString:@"iPhone5,1"])
        return PlatformiPhone5_GSM;
    else if ([platform isEqualToString:@"iPhone5,2"])
        return PlatformiPhone5_CDMA;
    else if ([platform isEqualToString:@"iPhone5,3"])
        return PlatformiPhone5c_GSM;
    else if ([platform isEqualToString:@"iPhone5,4"])
        return PlatformiPhone5c_CDMA;
    else if ([platform isEqualToString:@"iPhone6,1"])
        return PlatformiPhone5s_GSM;
    else if ([platform isEqualToString:@"iPhone6,2"])
        return PlatformiPhone5s_CDMA;
    else if ([platform isEqualToString:@"iPhone7,1"])
        return PlatformiPhone6Plus;
    else if ([platform isEqualToString:@"iPhone7,2"])
        return PlatformiPhone6;
    else if ([platform isEqualToString:@"iPod1,1"])
        return PlatformiPodTouch1G;
    else if ([platform isEqualToString:@"iPod2,1"])
        return PlatformiPodTouch2G;
    else if ([platform isEqualToString:@"iPod3,1"])
        return PlatformiPodTouch3G;
    else if ([platform isEqualToString:@"iPod4,1"])
        return PlatformiPodTouch4G;
    else if ([platform isEqualToString:@"iPod5,1"])
        return PlatformiPodTouch5G;
    else if ([platform isEqualToString:@"iPad1,1"])
        return PlatformiPad_Wifi;
    else if ([platform isEqualToString:@"iPad2,1"])
        return PlatformiPad2_WiFi;
    else if ([platform isEqualToString:@"iPad2,2"])
        return PlatformiPad2_GSM;
    else if ([platform isEqualToString:@"iPad2,3"])
        return PlatformiPad2_CDMA;
    else if ([platform isEqualToString:@"iPad2,4"])
        return PlatformiPad2_RevA;
    else if ([platform isEqualToString:@"iPad2,5"])
        return PlatformiPadMini_WiFi;
    else if ([platform isEqualToString:@"iPad2,6"])
        return PlatformiPadMini_GSM;
    else if ([platform isEqualToString:@"iPad2,7"])
        return PlatformiPadMini_CDMA;
    else if ([platform isEqualToString:@"iPad3,1"])
        return PlatformiPad3_WiFi;
    else if ([platform isEqualToString:@"iPad3,2"])
        return PlatformiPad3_GSM;
    else if ([platform isEqualToString:@"iPad3,3"])
        return PlatformiPad3_CDMA;
    else if ([platform isEqualToString:@"iPad3,4"])
        return PlatformiPad4_WiFi;
    else if ([platform isEqualToString:@"iPad3,5"])
        return PlatformiPad4_GSM;
    else if ([platform isEqualToString:@"iPad3,6"])
        return PlatformiPad4_CDMA;
    else if ([platform isEqualToString:@"iPad4,1"])
        return PlatformiPadAir_WiFi;
    else if ([platform isEqualToString:@"iPad4,2"])
        return PlatformiPadAir_Cellular;
    else if ([platform isEqualToString:@"iPad4,3"])
        return PlatformiPadAir_China;
    else if ([platform isEqualToString:@"iPad4,4"])
        return PlatformiPadMini2_WiFi;
    else if ([platform isEqualToString:@"iPad4,5"])
        return PlatformiPadMini2_Cellular;
    else if ([platform isEqualToString:@"iPad4,6"])
        return PlatformiPadMini2_China;
    else if ([platform isEqualToString:@"iPad4,7"])
        return PlatformiPadMini3_WiFi;
    else if ([platform isEqualToString:@"iPad4,8"])
        return PlatformiPadMini3_Cellular;
    else if ([platform isEqualToString:@"iPad4,9"])
        return PlatformiPadMini3_China;
    else if ([platform isEqualToString:@"iPad5,3"])
        return PlatformiPadAir2_WiFi;
    else if ([platform isEqualToString:@"iPad5,4"])
        return PlatformiPadAir2_Cellular;
    else if ([platform isEqualToString:@"AppleTV1,1"])
        return PlatformAppleTV1G;
    else if ([platform isEqualToString:@"AppleTV1,2"])
        return PlatformAppleTV2G;
    else if ([platform isEqualToString:@"i386"])
        return Platformi386Simulator;
    else if ([platform isEqualToString:@"x86_64"])
        return Platformx86_64Simulator;
    return PlatformUnkonwn;
}

- (NSString *)platformName
{
    switch ([self platform]) {
        case PlatformiPhone:
            return @"iPhone";
        case PlatformiPhone3G:
            return @"iPhone3G";
        case PlatformiPhone3GS:
            return @"iPhone3GS";
        case PlatformiPhone4_GSM:
        case PlatformiPhone4_RevA:
        case PlatformiPhone4_CDMA:
            return @"iPhone4";
        case PlatformiPhone4S:
            return @"iPhone4S";
        case PlatformiPhone5_GSM:
        case PlatformiPhone5_CDMA:
            return @"iPhone5";
        case PlatformiPhone5c_GSM:
        case PlatformiPhone5c_CDMA:
            return @"iPhone5c";
        case PlatformiPhone5s_GSM:
        case PlatformiPhone5s_CDMA:
            return @"iPhone5s";
        case PlatformiPhone6Plus:
            return @"iPhone6 Plus";
        case PlatformiPhone6:
            return @"iPhone6";
        case PlatformiPodTouch1G:
            return @"iPod touch 1st Gen";
        case PlatformiPodTouch2G:
            return @"iPod touch 2nd Gen";
        case PlatformiPodTouch3G:
            return @"iPod touch 3rd Gen";
        case PlatformiPodTouch4G:
            return @"iPod touch 4th Gen";
        case PlatformiPodTouch5G:
            return @"iPod touch 5th Gen";
        case PlatformiPad_Wifi:
            return @"iPad";
        case PlatformiPad2_WiFi:
        case PlatformiPad2_GSM:
        case PlatformiPad2_CDMA:
        case PlatformiPad2_RevA:
            return @"iPad2";
        case PlatformiPadMini_WiFi:
        case PlatformiPadMini_GSM:
        case PlatformiPadMini_CDMA:
            return @"iPad mini";
        case PlatformiPad3_WiFi:
        case PlatformiPad3_GSM:
        case PlatformiPad3_CDMA:
            return @"iPad3";
        case PlatformiPad4_WiFi:
        case PlatformiPad4_GSM:
        case PlatformiPad4_CDMA:
            return @"iPad4";
        case PlatformiPadAir_WiFi:
        case PlatformiPadAir_Cellular:
        case PlatformiPadAir_China:
            return @"iPad Air";
        case PlatformiPadMini2_WiFi:
        case PlatformiPadMini2_Cellular:
        case PlatformiPadMini2_China:
            return @"iPad mini 2";
        case PlatformiPadMini3_WiFi:
        case PlatformiPadMini3_Cellular:
        case PlatformiPadMini3_China:
            return @"iPad mini 3";
        case PlatformiPadAir2_WiFi:
        case PlatformiPadAir2_Cellular:
            return @"iPad Air 2";
        case PlatformAppleTV1G:
        case PlatformAppleTV2G:
            return @"Apple TV";
        case Platformi386Simulator:
        case Platformx86_64Simulator:
            return @"Simulator";
        case PlatformUnkonwn:
        default:
            return @"Unknown";
    }
}