iOS 一些設(shè)備信息的獲取方法

設(shè)備啟動時間

- (NSString *)bootTimeInSec
{
    NSString *temp = [NSString stringWithFormat:@"%ld",bootSecTime()];
//    NSLog(@"bootTimeInSec : %@",temp);
    return temp;
}
static time_t bootSecTime(){
    struct timeval boottime;
    size_t len = sizeof(boottime);
    int mib[2] = {CTL_KERN, KERN_BOOTTIME};
    if( sysctl(mib, 2, &boottime, &len, NULL, 0) < 0)
    {
        return 0;
    }
    return boottime.tv_sec;
}

國家

- (NSString *)countryCode
{
    NSLocale *locale = [NSLocale currentLocale];
    NSString *countryCode = [locale objectForKey:NSLocaleCountryCode];
//    NSLog(@"countryCode : %@",countryCode);
    
    return countryCode;
}

語言

// 語言
- (NSString *)language {
    
    NSString *language;
    NSLocale *locale = [NSLocale currentLocale];
    if ([[NSLocale preferredLanguages] count] > 0) {
        language = [[NSLocale preferredLanguages]objectAtIndex:0];
        
    } else {
        language = [locale objectForKey:NSLocaleLanguageCode];
        
    }
//    NSLog(@"language : %@",language);
    
    return language;
}

設(shè)備名稱

- (NSString *)deviceName
{
    
    if ([[[UIDevice currentDevice] name] length] == 0) {
        return @"";
    }
    
// md5 32位 小寫
    NSString *deviceName = [CryptionUtils MD5ForLower32Bate:[[UIDevice currentDevice] name]];
//    NSLog(@"deviceName : %@",deviceName);
    return deviceName;
    
}

系統(tǒng)版本

- (NSString *)systemVersion
{
    NSString *version = [[UIDevice currentDevice] systemVersion];
    return version;
    
}

設(shè)備machine

- (NSString *)machine
{
    NSString *machine =getSystemHardwareByName(SIDFAMachine);
//    NSLog(@"machine: %@",machine);
    return machine == nil ? @"" : machine;
    
}
static const char *SIDFAMachine = "hw.machine";
static NSString *getSystemHardwareByName(const char *typeSpecifier)
{
    size_t size;
    sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);
    char *answer = malloc(size);
    sysctlbyname(typeSpecifier, answer, &size, NULL,0); NSString *results = [NSString stringWithUTF8String:answer]; 
    free(answer);
    return results;
}

設(shè)備model

static const char *SIDFAModel = "hw.model";
- (NSString *)model
{
    NSString *model =getSystemHardwareByName(SIDFAModel);
//    NSLog(@"model : %@", model);
    return model == nil ? @"" : model;
}

運營商

- (NSString *)carrierInfo {
#if TARGET_IPHONE_SIMULATOR
    return @"SIMULATOR";
#else
    static dispatch_queue_t _queue;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        _queue = dispatch_queue_create([[NSString stringWithFormat:@"com.carr.%@", self] UTF8String], NULL);
    });
        __block NSString *carr = nil;
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
        dispatch_async(_queue, ^{
            CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
            CTCarrier *carrier = nil;
            if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 12.1) {
                if ([info respondsToSelector:@selector(serviceSubscriberCellularProviders)]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
                    NSArray *carrierKeysArray = [info.serviceSubscriberCellularProviders.allKeys sortedArrayUsingSelector:@selector(compare:)];
                    carrier = info.serviceSubscriberCellularProviders
                    [carrierKeysArray.firstObject];
                    if (!carrier.mobileNetworkCode) {
                        carrier =info.serviceSubscriberCellularProviders
                        [carrierKeysArray.lastObject];
                    }
#pragma clang diagnostic pop
                }
            }
            
            if(!carrier) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
                carrier = info.subscriberCellularProvider;
#pragma clang diagnostic pop
            }
            if (carrier != nil) {
                NSString *networkCode = [carrier mobileNetworkCode];
                NSString *countryCode = [carrier mobileCountryCode];
                if (countryCode && [countryCode isEqualToString:@"460"] && networkCode) {
                    if ([networkCode isEqualToString:@"00"] ||
                        [networkCode isEqualToString:@"02"] ||
                        [networkCode isEqualToString:@"07"] ||
                        [networkCode isEqualToString:@"08"]) {
                        carr= @"中國移動";
                    }
                    if ([networkCode isEqualToString:@"01"] ||
                        [networkCode isEqualToString:@"06"] ||
                        [networkCode isEqualToString:@"09"]) {
                        carr= @"中國聯(lián)通";
                    }
                    if ([networkCode isEqualToString:@"03"] ||
                        [networkCode isEqualToString:@"05"] ||
                        [networkCode isEqualToString:@"11"]) {
                        carr= @"中國電信";
                    }
                    if ([networkCode isEqualToString:@"04"]) {
                        carr= @"中國衛(wèi)通";
                    }
                    if ([networkCode isEqualToString:@"20"]) {
                        carr= @"中國鐵通";
                    }
                } else {
                    carr = [carrier.carrierName copy];
                }
                if (carr.length <= 0) {
                    carr = @"unknown";
                }
                dispatch_semaphore_signal(semaphore);
            }
        });
        dispatch_time_t t = dispatch_time(DISPATCH_TIME_NOW, 0.5*NSEC_PER_SEC);
        dispatch_semaphore_wait(semaphore, t);
        return [carr copy];
#endif
}

物理內(nèi)存

- (NSString *)memory
{
    return [NSString stringWithFormat:@"%lld", [NSProcessInfo processInfo].physicalMemory];
}

硬盤容量

- (NSString *)disk
{
    int64_t space = -1;
    NSError *error = nil;
    NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
    if (!error) {
        space = [[attrs objectForKey:NSFileSystemSize] longLongValue];
    }
    
    if(space < 0) {
        space = -1;
    }
    NSString *temp = [NSString stringWithFormat:@"%lld",space];
//    NSLog(@"disk : %@", temp);
    return temp;
}

系統(tǒng)更新時間

- (NSString *)sysFileTime
{
    NSString *result = @"";
    NSString *information = @"L3Zhci9tb2JpbGUvTGlicmFyeS9Vc2VyQ29uZmlndXJhdGlvblByb2ZpbGVzL1B1YmxpY0luZm8vTUNNZXRhLnBsaXN0";
    NSData *data=[[NSData alloc]initWithBase64EncodedString:information options:0] ;
    NSString *dataString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSError *error = nil;
    NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:dataString error:&error];
    if (fileAttributes) {
        id singleAttibute = [fileAttributes objectForKey:NSFileCreationDate];
        if ([singleAttibute isKindOfClass:[NSDate class]]) {
            NSDate *dataDate = singleAttibute;
            result = [NSString stringWithFormat:@"%f",[dataDate timeIntervalSince1970]];
        }
    }
//    NSLog(@"sysFileTime : %@", result);
    return result;
}

時區(qū)

- (NSString *) timeZone
{
    NSInteger offset = [NSTimeZone systemTimeZone].secondsFromGMT;
    NSString *temp = [NSString stringWithFormat:@"%ld",(long)offset];
    return temp;
}

國際區(qū)號

- (NSString *)internationalCode {
    // 1. 先獲取手機號所在的國家地區(qū)碼
    NSString *interCode = @"";
    NSString *mccCountryCode = [self MCCCountryCode];
    
    // 2. 根據(jù)國家地區(qū)碼映射國際區(qū)號
    // 例如: 中國的國家地區(qū)碼為 460   對應(yīng)的國際區(qū)號為 86
    // 部分國家 地區(qū)碼對應(yīng)的國際區(qū)號請參考: https://www.mobibrw.com/2018/10871
    if ([mccCountryCode isEqualToString:@"460"]) {
        interCode = @"86";
    }
    
    return interCode;
     
}

國家地區(qū)碼

- (NSString *)MCCCountryCode {
#if TARGET_IPHONE_SIMULATOR
    return @"SIMULATOR";
#else
    static dispatch_queue_t _queue;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        _queue = dispatch_queue_create([[NSString stringWithFormat:@"com.carr.%@", self] UTF8String], NULL);
    });
        __block NSString *mccCountryCode = nil;
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
        dispatch_async(_queue, ^{
            CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
            CTCarrier *carrier = nil;
            if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 12.1) {
                if ([info respondsToSelector:@selector(serviceSubscriberCellularProviders)]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
                    NSArray *carrierKeysArray = [info.serviceSubscriberCellularProviders.allKeys sortedArrayUsingSelector:@selector(compare:)];
                    carrier = info.serviceSubscriberCellularProviders
                    [carrierKeysArray.firstObject];
                    if (!carrier.mobileNetworkCode) {
                        carrier =info.serviceSubscriberCellularProviders
                        [carrierKeysArray.lastObject];
                    }
#pragma clang diagnostic pop
                }
            }
            
            if(!carrier) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
                carrier = info.subscriberCellularProvider;
#pragma clang diagnostic pop
            }
            if (carrier != nil) {
                mccCountryCode = [carrier mobileCountryCode];
                

                
                dispatch_semaphore_signal(semaphore);
            }
        });
        dispatch_time_t t = dispatch_time(DISPATCH_TIME_NOW, 0.5*NSEC_PER_SEC);
        dispatch_semaphore_wait(semaphore, t);
    
        // countryCode 為國家/地區(qū)碼
        //
    
        return [mccCountryCode copy];
#endif
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市滨嘱,隨后出現(xiàn)的幾起案子捌臊,更是在濱河造成了極大的恐慌,老刑警劉巖画舌,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡迹冤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門虎忌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泡徙,“玉大人,你說我怎么就攤上這事膜蠢】懊辏” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵挑围,是天一觀的道長礁竞。 經(jīng)常有香客問我,道長杉辙,這世上最難降的妖魔是什么模捂? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蜘矢,結(jié)果婚禮上狂男,老公的妹妹穿的比我還像新娘。我一直安慰自己品腹,他們只是感情好岖食,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舞吭,像睡著了一般泡垃。 火紅的嫁衣襯著肌膚如雪析珊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天兔毙,我揣著相機與錄音唾琼,去河邊找鬼。 笑死澎剥,一個胖子當著我的面吹牛锡溯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哑姚,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祭饭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叙量?” 一聲冷哼從身側(cè)響起倡蝙,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绞佩,沒想到半個月后寺鸥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡品山,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年胆建,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肘交。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡笆载,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涯呻,到底是詐尸還是另有隱情凉驻,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布复罐,位于F島的核電站涝登,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏效诅。R本人自食惡果不足惜缀拭,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望填帽。 院中可真熱鬧蛛淋,春花似錦、人聲如沸篡腌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘹悼。三九已至叛甫,卻和暖如春层宫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背其监。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工萌腿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抖苦。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓毁菱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锌历。 傳聞我的和親對象是個殘疾皇子贮庞,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

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