獲取iOS設(shè)備信息

在進(jìn)行iOS開發(fā)過程中斩例,我們有時(shí)候需要獲取設(shè)備的一些信息励七。下面整理了一些常用的獲取設(shè)備信息的方法扔字。

1.獲取系統(tǒng)版本號(hào)

[[UIDevice currentDevice] systemVersion];

2. 獲取設(shè)備名稱

[[UIDevice currentDevice] name];

3.獲取APP版本

NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
NSString *appVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];

4.獲取運(yùn)營(yíng)商名稱

  • 需要先導(dǎo)入頭文件
#import <CoreTelephony/CTCarrier.h>  
#import <CoreTelephony/CTTelephonyNetworkInfo.h>  

  • 獲取運(yùn)營(yíng)商名稱
CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [info subscriberCellularProvider];
NSString *carrierName = [NSString stringWithFormat:@"%@",[carrier carrierName]];

5.獲取IP地址

IP地址分為內(nèi)網(wǎng)和公網(wǎng)的IP地址

  • 獲取內(nèi)網(wǎng)IP
// 需要導(dǎo)入的包
#import <ifaddrs.h>
#import <arpa/inet.h>
#import <net/if.h>

// 宏定義
#define IOS_CELLULAR @"pdp_ip0"
#define IOS_WIFI @"en0"
#define IOS_VPN @"utun0"
#define IP_ADDR_IPv4 @"ipv4"
#define IP_ADDR_IPv6 @"ipv6"

- (NSString *)getIPAddress {
    NSArray *searchArray = @[ IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6,               
        IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" 
        IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ];
    NSDictionary *addresses = [self getAddresses];
    __block NSString *address;
    [searchArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL 
      * _Nonnull stop) {
        address = addresses[obj];
        NSLog(@"key = %@ ; object = %@",obj,addresses[obj]);
        if([self isValidateIP:address]) *stop = YES;
    }];
    return address ? address : @"0.0.0.0";
}

- (BOOL)isValidateIP:(NSString *)ipAddress {
    if (ipAddress.length == 0) {
        return NO;
    }
    NSString *urlRegEx = @"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
    NSError *error;
    NSRegularExpression *regex = 
    [NSRegularExpressionregularExpressionWithPattern:urlRegEx options:0 error:&error];
    if (regex != nil) {
        NSTextCheckingResult *firstMatch = [regex firstMatchInString:ipAddress 
            options:0 range:NSMakeRange(0, [ipAddress length])];
        if (firstMatch) {
            NSRange resultRange = [firstMatch rangeAtIndex:0];
            NSString *result = [ipAddress substringWithRange:resultRange];
            NSLog(@"result = %@",result);
            return YES;
        }
    }
    return NO;
}

- (NSDictionary *)getAddresses {
    NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];
    struct ifaddrs *interfaces;
    if (!getifaddrs(&interfaces)) {
        struct ifaddrs *interface;
        for (interface=interfaces; interface; interface=interface->ifa_next) {
            if (!(interface->ifa_flags & IFF_UP)) {
                continue;
            }
            const struct sockaddr_in *addr = (const struct sockaddr_in*)interface-
              >ifa_addr;
            char addrBuf[MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN)];
            if (addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {
                NSString *name = [NSString stringWithUTF8String:interface-
                >ifa_name];
                NSString *type;
                if (addr->sin_family == AF_INET) {
                  if (inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {
                        type = IP_ADDR_IPv4;
                    }
                } else {
                    const struct sockaddr_in6 *addr6 = (const struct 
                        sockaddr_in6*)interface->ifa_addr;
                    if (inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, 
                        INET6_ADDRSTRLEN)) {
                        type = IP_ADDR_IPv6;
                    }
                }
                if (type) {
                    NSString *key = [NSString stringWithFormat:@"%@/%@",name,type];
                    addresses[key] = [NSString stringWithUTF8String:addrBuf];
                }
            }
        }
        freeifaddrs(interfaces);
    }
    return [addresses count] ? addresses : nil;
}

  • 獲取公網(wǎng)IP
NSURL *ipURL = [NSURL URLWithString:@"http://ip.taobao.com/service/getIpInfo.php?
    ip=myip"];
NSData *data = [NSData dataWithContentsOfURL:ipURL];
NSDictionary *ipDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSString *ipStr = nil;
if (ipDic && [ipDic[@"code"] integerValue]== 0) {
    ipStr = ipDic[@"data"][@"ip"];
}
return (ipStr ? ipStr : @"");

6.獲取設(shè)備的型號(hào)

需要獲取的型號(hào)格式如:iPhone 6s Plus
參考: https://www.theiphonewiki.com/wiki/Models菩咨,這個(gè)是蘋果官方的設(shè)備類型說明丢烘。

//需要導(dǎo)入的包
#import <sys/utsname.h>

//獲取設(shè)備型號(hào)
- (NSString *)getDeviceModelName {
    struct utsname systemInfo;
    uname(&systemInfo);
    NSString *deviceModel = [NSString stringWithCString:systemInfo.machine 
       encoding:NSUTF8StringEncoding];
    NSString *name = [self getVersionName:deviceModel];
    return name;
}

- (NSString *)getVersionName:(NSString *)deviceModel {
        //iPhone系列
    if ([deviceModel isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
    if ([deviceModel isEqualToString:@"iPhone3,2"])    return @"iPhone 4";
    if ([deviceModel isEqualToString:@"iPhone3,3"])    return @"iPhone 4";
    if ([deviceModel isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([deviceModel isEqualToString:@"iPhone5,1"])    return @"iPhone 5";
    if ([deviceModel isEqualToString:@"iPhone5,2"])    return @"iPhone 5";
    if ([deviceModel isEqualToString:@"iPhone5,3"])    return @"iPhone 5C";
    if ([deviceModel isEqualToString:@"iPhone5,4"])    return @"iPhone 5C";
    if ([deviceModel isEqualToString:@"iPhone6,1"])    return @"iPhone 5S";
    if ([deviceModel isEqualToString:@"iPhone6,2"])    return @"iPhone 5S";
    if ([deviceModel isEqualToString:@"iPhone7,2"])    return @"iPhone 6";
    if ([deviceModel isEqualToString:@"iPhone8,1"])    return @"iPhone 6s";
    if ([deviceModel isEqualToString:@"iPhone7,1"])    return @"iPhone 6 Plus";
    if ([deviceModel isEqualToString:@"iPhone8,2"])    return @"iPhone 6s Plus";
    if ([deviceModel isEqualToString:@"iPhone8,4"])    return @"iPhone SE";
    if ([deviceModel isEqualToString:@"iPhone9,1"])    return @"iPhone 7";
    if ([deviceModel isEqualToString:@"iPhone9,3"])    return @"iPhone 7";
    if ([deviceModel isEqualToString:@"iPhone9,2"])    return @"iPhone 7 Plus";
    if ([deviceModel isEqualToString:@"iPhone9,4"])    return @"iPhone 7 Plus";

        //iPod系列
    if ([deviceModel isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";
    if ([deviceModel isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";
    if ([deviceModel isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";
    if ([deviceModel isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";
    if ([deviceModel isEqualToString:@"iPod5,1"])      return @"iPod Touch 5G";
    if ([deviceModel isEqualToString:@"iPod7,1"])      return @"iPod Touch 7G";

        //iPad系列
    if ([deviceModel isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([deviceModel isEqualToString:@"iPad2,1"])      return @"iPad 2";
    if ([deviceModel isEqualToString:@"iPad2,2"])      return @"iPad 2";
    if ([deviceModel isEqualToString:@"iPad2,3"])      return @"iPad 2";
    if ([deviceModel isEqualToString:@"iPad2,4"])      return @"iPad 2";

    if ([deviceModel isEqualToString:@"iPad2,5"])      return @"iPad mini";
    if ([deviceModel isEqualToString:@"iPad2,6"])      return @"iPad mini";
    if ([deviceModel isEqualToString:@"iPad2,7"])      return @"iPad mini";
    if ([deviceModel isEqualToString:@"iPad4,4"])      return @"iPad mini 2";
    if ([deviceModel isEqualToString:@"iPad4,5"])      return @"iPad mini 2";
    if ([deviceModel isEqualToString:@"iPad4,6"])      return @"iPad mini 2";
    if ([deviceModel isEqualToString:@"iPad4,7"])      return @"iPad mini 3";
    if ([deviceModel isEqualToString:@"iPad4,8"])      return @"iPad mini 3";
    if ([deviceModel isEqualToString:@"iPad4,9"])      return @"iPad mini 3";
    if ([deviceModel isEqualToString:@"iPad5,1"])      return @"iPad mini 4";
    if ([deviceModel isEqualToString:@"iPad5,2"])      return @"iPad mini 4";

    if ([deviceModel isEqualToString:@"iPad3,1"])      return @"iPad 3G";
    if ([deviceModel isEqualToString:@"iPad3,2"])      return @"iPad 3G";
    if ([deviceModel isEqualToString:@"iPad3,3"])      return @"iPad 3G";
    if ([deviceModel isEqualToString:@"iPad3,4"])      return @"iPad 4G";
    if ([deviceModel isEqualToString:@"iPad3,5"])      return @"iPad 4G";
    if ([deviceModel isEqualToString:@"iPad3,6"])      return @"iPad 4G";
    if ([deviceModel isEqualToString:@"iPad6,11"])      return @"iPad 5G";
    if ([deviceModel isEqualToString:@"iPad6,12"])      return @"iPad 5G";

    if ([deviceModel isEqualToString:@"iPad4,1"])      return @"iPad Air";
    if ([deviceModel isEqualToString:@"iPad4,2"])      return @"iPad Air";
    if ([deviceModel isEqualToString:@"iPad4,3"])      return @"iPad Air";
    if ([deviceModel isEqualToString:@"iPad5,3"])      return @"iPad Air 2";
    if ([deviceModel isEqualToString:@"iPad5,4"])      return @"iPad Air 2";

    if ([deviceModel isEqualToString:@"iPad6,3"])      return @"iPad Pro";
    if ([deviceModel isEqualToString:@"iPad6,4"])      return @"iPad Pro";
    if ([deviceModel isEqualToString:@"iPad6,7"])      return @"iPad Pro";
    if ([deviceModel isEqualToString:@"iPad6,8"])      return @"iPad Pro";
    if ([deviceModel isEqualToString:@"iPad7,1"])      return @"iPad Pro";
    if ([deviceModel isEqualToString:@"iPad7,2"])      return @"iPad Pro";
    if ([deviceModel isEqualToString:@"iPad7,3"])      return @"iPad Pro";
    if ([deviceModel isEqualToString:@"iPad7,4"])      return @"iPad Pro";

    if ([deviceModel isEqualToString:@"i386"])         return @"Simulator";
    if ([deviceModel isEqualToString:@"x86_64"])       return @"Simulator";

    return deviceModel;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俱箱,一起剝皮案震驚了整個(gè)濱河市国瓮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狞谱,老刑警劉巖乃摹,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異跟衅,居然都是意外死亡孵睬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門伶跷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掰读,“玉大人,你說我怎么就攤上這事叭莫〉讣” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵雇初,是天一觀的道長(zhǎng)拢肆。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么善榛? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任辩蛋,我火速辦了婚禮,結(jié)果婚禮上移盆,老公的妹妹穿的比我還像新娘悼院。我一直安慰自己,他們只是感情好咒循,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布据途。 她就那樣靜靜地躺著,像睡著了一般叙甸。 火紅的嫁衣襯著肌膚如雪颖医。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天裆蒸,我揣著相機(jī)與錄音熔萧,去河邊找鬼。 笑死僚祷,一個(gè)胖子當(dāng)著我的面吹牛佛致,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辙谜,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俺榆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了装哆?” 一聲冷哼從身側(cè)響起罐脊,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜕琴,沒想到半個(gè)月后萍桌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凌简,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年梗夸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片号醉。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡反症,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出畔派,到底是詐尸還是另有隱情铅碍,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布线椰,位于F島的核電站胞谈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烦绳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一卿捎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧径密,春花似錦午阵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惧眠,卻和暖如春籽懦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氛魁。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工暮顺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秀存。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓拖云,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親应又。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容