更新了一下,支持iPhone4和iPad,iPod Touch4

#import <Foundation/Foundation.h>
#import <sys/utsname.h>

enum {
    MODEL_UNKNOWN,
    MODEL_IPHONE_SIMULATOR,
    MODEL_IPOD_TOUCH,
    MODEL_IPOD_TOUCH_2G,
    MODEL_IPOD_TOUCH_3G,
    MODEL_IPOD_TOUCH_4G,
    MODEL_IPHONE,
    MODEL_IPHONE_3G,
    MODEL_IPHONE_3GS,
    MODEL_IPHONE_4G,
    MODEL_IPAD
};

@interface DeviceDetection : NSObject

+ (uint) detectDevice;
+ (int) detectModel;

+ (NSString *) returnDeviceName:(BOOL)ignoreSimulator;
+ (BOOL) isIPodTouch;
+ (BOOL) isOS4;
+ (BOOL) canSendSms;

@end

#import "DeviceDetection.h"
#import <MessageUI/MessageUI.h>
#include <sys/types.h>
#include <sys/sysctl.h>

@implementation DeviceDetection

+ (BOOL) isIPodTouch
{
    int model = [DeviceDetection detectDevice];
    if (model == MODEL_IPOD_TOUCH || model == MODEL_IPAD){
        //|| model == MODEL_IPHONE_SIMULATOR){
        return YES;
    }    
    else {
        return NO;
    }

}

+ (BOOL) isOS4
{
    // TBD
    
    return YES;
    
}

+ (BOOL)canSendSms
{
    return [MFMessageComposeViewController canSendText];
}

+ (NSString *)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 stringWithUTF8String:machine];
    free(machine);
    return platform;
}

+ (int) detectModel{
    NSString *platform = [DeviceDetection platform];
    
    if ([platform isEqualToString:@"iPhone1,1"])   
        return MODEL_IPHONE;
    
    if ([platform isEqualToString:@"iPhone1,2"])   
        return MODEL_IPHONE_3G;
    
    if ([platform isEqualToString:@"iPhone2,1"])
        return MODEL_IPHONE_3GS;
    
    if ([platform isEqualToString:@"iPhone3,1"])    
        return MODEL_IPHONE_4G;
    
    if ([platform isEqualToString:@"iPod1,1"])      
        return MODEL_IPOD_TOUCH;
    
    if ([platform isEqualToString:@"iPod2,1"])      
        return MODEL_IPOD_TOUCH_2G;
    
    if ([platform isEqualToString:@"iPod3,1"])      
        return MODEL_IPOD_TOUCH_3G;
    
    if ([platform isEqualToString:@"iPod4,1"])      
        return MODEL_IPOD_TOUCH_4G;
    
    if ([platform isEqualToString:@"iPad1,1"])      
        return MODEL_IPAD;
    
    if ([platform isEqualToString:@"i386"])         
        return MODEL_IPHONE_SIMULATOR;
    
    return MODEL_UNKNOWN;
}

+ (uint) detectDevice {
    NSString *model= [[UIDevice currentDevice] model];
    
    // Some iPod Touch return "iPod Touch", others just "iPod"
    
    NSString *iPodTouch = @"iPod Touch";
    NSString *iPodTouchLowerCase = @"iPod touch";
    NSString *iPodTouchShort = @"iPod";
    NSString *iPad = @"iPad";
    
    NSString *iPhoneSimulator = @"iPhone Simulator";
    
    uint detected;
    
    if ([model compare:iPhoneSimulator] == NSOrderedSame) {
        // iPhone simulator
        detected = MODEL_IPHONE_SIMULATOR;
    }
    else if ([model compare:iPad] == NSOrderedSame) {
        // iPad
        detected = MODEL_IPAD;
    } else if ([model compare:iPodTouch] == NSOrderedSame) {
        // iPod Touch
        detected = MODEL_IPOD_TOUCH;
    } else if ([model compare:iPodTouchLowerCase] == NSOrderedSame) {
        // iPod Touch
        detected = MODEL_IPOD_TOUCH;
    } else if ([model compare:iPodTouchShort] == NSOrderedSame) {
        // iPod Touch
        detected = MODEL_IPOD_TOUCH;
    } else {
        // Could be an iPhone V1 or iPhone 3G (model should be "iPhone")
        struct utsname u;
       
        // u.machine could be "i386" for the simulator, "iPod1,1" on iPod Touch, "iPhone1,1" on iPhone V1 & "iPhone1,2" on iPhone3G
       
        uname(&u);
       
        if (!strcmp(u.machine, "iPhone1,1")) {
            detected = MODEL_IPHONE;
        } else if (!strcmp(u.machine, "iPhone1,2")){
            detected = MODEL_IPHONE_3G;
        } else if (!strcmp(u.machine, "iPhone2,1")){
            detected = MODEL_IPHONE_3GS;
        } else if (!strcmp(u.machine, "iPhone3,1")){
            detected = MODEL_IPHONE_4G;
        }
    }
    return detected;
}

+ (NSString *) returnDeviceName:(BOOL)ignoreSimulator {
    NSString *returnValue = @"Unknown";
    
    switch ([DeviceDetection detectDevice]) {
        case MODEL_IPHONE_SIMULATOR:
            if (ignoreSimulator) {
                returnValue = @"iPhone 3G";
            } else {
                returnValue = @"iPhone Simulator";
            }
            break;
        case MODEL_IPOD_TOUCH:
            returnValue = @"iPod Touch";
            break;
        case MODEL_IPHONE:
            returnValue = @"iPhone";
            break;
        case MODEL_IPHONE_3G:
            returnValue = @"iPhone 3G";
            break;
        default:
            break;
    }
    
    return returnValue;
}

@end

检测iPhone/iPod Touch/iPad设备类型 .相关推荐

  1. 如何从iPhone / iPod Touch / iPad连接

    如何从iPhone / iPod Touch / iPad连接 本文将介绍从iPhone / iPod Touch / iPad等设备连接到已启用L2TP over IPsec功能的PacketiX ...

  2. 【转】Downgrade iOS 4 to OS 3.1.3/3.1.2 (iPhone, iPod Touch)

    http://www.iphoneheat.com/2010/07/downgrade-ios-4-to-os-3-1-3-3-1-2-iphone-ipod-touch/ 请注意红色部分,没有备份s ...

  3. iPhone / iPod Touch 文件传输解决方案 – 开源框架:Cocoa Web Resource Project

    到目前为止,也就是iPhone SDK 2.2 ,苹果仍然没有为开发者提供一个文件传输的解决方案.如果一个应用需要为用户提供往iPhone上传文件的功能,大抵会采用下面几种方法之一: 通过一个链接从网 ...

  4. 媒体查询在iPhone iPod touch中使用safari浏览器失效的原因

    在iphone和ipod touch中使用的Safari浏览器会出现媒体查询失效这是为什么呢 这是因为在iphone中使用Safari浏览器在进行页面显示时,将窗口宽度当做980px像素进行显示.所以 ...

  5. The bundle does not contain an app icon for iPhone / iPod Touch of exactly '57x57' pixels

    遇到这个问题问题,搜索了一圈要么不知道,要么喊改deploymenet target, 最后我是在项目属性-info-icon files(ios5)-下面添加了一个icon,然后弄了个icon.pn ...

  6. [转]iAP Cracker for iPhone/iPod/iPad

    源:http://cydia.myrepospace.com/urus ========================================== iAP Cracker by urus; ...

  7. iAP Cracker for iPhone/iPod/iPad

    源:http://cydia.myrepospace.com/urus ========================================== iAP Cracker by urus; ...

  8. 【转】Save SHSH Blobs for iPhone, iPad, iPod Touch with TinyUmbrella

    Using TinyUmbrella you can save SHSH blobs for iPhone 4, 3GS, 3G, iPad and iPod Touch 3G, 2G. In thi ...

  9. 检测iPhone/iPod Touch/iPad设备类型

    支持iPhone4和iPad,iPod Touch4 #import <Foundation/Foundation.h> #import <sys/utsname.h> enu ...

最新文章

  1. 独立重复实验与二项分布
  2. 关于IIS和Serv-U在同一台服务器中端口冲突问题
  3. 【NOIP2015模拟10.22】最小代价
  4. java字符串的课后作业
  5. dbms_lob包学习笔记之三:instr和substr存储过程
  6. 阿里程序员受邀去华为面试,却因这点没被录取。
  7. 【转】POP3、SMTP和IMAP之间的区别和联系
  8. 【数据库原理实验(openGauss)】视图
  9. Codeforces 505 A Mr. Kitayuta's Gift【暴力】
  10. JDK 9.0版本下载安装
  11. 逻辑学是计算机科学的一个重要分支,逻辑学在计算机科学中应用.doc
  12. 一 . css系列之html需知及ps的基础操作
  13. ORACLE EBS/ERP 固定资产总账模块分录
  14. azw3怎么在iphone上打开?
  15. CentOS7修改ip的两种方法
  16. 《Spark实时词频统计处理系统》
  17. 材料写作素材:关于“大”排比句40例
  18. win8计算机配置管理模板,Win8.1使用技巧 用户账户的配置管理
  19. 计蒜客-蒜头君回家(bfs)
  20. Cadence LDO capless 电路,包括版图,已通过lvs ,drc检查,个人流片过,包括偏置全电路

热门文章

  1. 阿里App支付服务端接口开发(含后台异步回调,退款)
  2. SQL 排序时对Null值的处理
  3. 微信小程序+云开发项目实战:商品类小程序(化妆品门店)
  4. 给客户寄样品谁付快递费?寄样品的运费太多了怎么管理?
  5. Json是什么?要怎样理解?
  6. 平面设计中负空间的意思是什么?如何设计?
  7. win7设置桌面豆绿色
  8. emd,eemd,vmd,频谱图,分解图对比matlab代码
  9. 用Websocket聊天完整demo,做笔记用,各位大佬多多指教
  10. 红米K30S至尊纪念版和小米10至尊纪念版的区别