1. 程式人生 > >獲取當前IOS裝置的CPU型號,CPU核數,GPU,GPU核數,螢幕解析度,螢幕尺寸,PPI等資訊

獲取當前IOS裝置的CPU型號,CPU核數,GPU,GPU核數,螢幕解析度,螢幕尺寸,PPI等資訊

今天和大家一起分享下如何獲取當前IOS裝置的CPU型號CPU核數GPUGPU核數螢幕解析度螢幕尺寸PPI等資訊。相信各位發現通過蘋果官方開放的API想要獲取當前裝置以上的一些資訊似乎做不到。如今蘋果的硬體更新速度相當的快,還要在網上發現有有心人收集了所有已釋出蘋果裝置的相關裝置資訊,且不定期回去更新。詳情請見:Blake’s iOS Device Specifications Grid

筆者比較懶,於是就借用這位有心人的裝置資訊來幫助我們獲取iOS的以上的裝置資訊。下面我們就來看看程式碼。

首先我們為NSString新增一個Category,NSString+StringRegular。

//
//  NSString+StringRegular.h
//  HardwareInfo
//
//  Created by pcjbird on 15/5/27.
//  Copyright (c) 2015年 Zero Status. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSString (StringRegular)

-(NSMutableArray *)substringByRegular:(NSString *)regular;

@end

//
//  NSString+StringRegular.m
//  HardwareInfo
//
//  Created by pcjbird on 15/5/27.
//  Copyright (c) 2015年 Zero Status. All rights reserved.
//
#import "NSString+StringRegular.h" @implementation NSString (StringRegular) -(NSMutableArray *)substringByRegular:(NSString *)regular{ NSString * reg=regular; NSRange r= [self rangeOfString:reg options:NSRegularExpressionSearch]; NSMutableArray *arr=[NSMutableArray array]; if (r.length != NSNotFound &&r.length != 0) { while (r.length != NSNotFound &&r.length != 0) { NSString* substr = [self substringWithRange:r]; [arr addObject:substr]; NSRange startr=NSMakeRange(r.location+r.length, [self length]-r.location-r.length); r=[self rangeOfString:reg options:NSRegularExpressionSearch range:startr]; } } return arr; } @end

接下來,我們來實現iOSHardwareInfoDataBase。


//
//  iOSHardwareInfoDataBase.h
//  HardwareInfo
//
//  Created by pcjbird on 15/5/27.
//  Copyright (c) 2015年 Zero Status. All rights reserved.
//

#import <Foundation/Foundation.h>

/*********************************
 Device,
 Model ID,
 Year,
 SoC,
 RAM (MB),
 Mem Speed (MHz),
 Mem Type,
 CPU,
 CPU Arch,
 Data Width,
 CPU Cores,
 CPU Clock (MHz),
 Geekbench Score,
 GPU,
 GPU Cores,
 GPU Clock (MHz),
 Screen Res,
 PPI,
 Screen Size (inches)
 *********************************/

@interface iOSHardwareInfoDataBase : NSObject

+ (iOSHardwareInfoDataBase *) sharedInstance;
@property(nonatomic, readonly) BOOL isReady;

-(NSDictionary *)currentDeviceInfo;
@end


//
// iOSHardwareInfoDataBase.m
// HardwareInfo
//
// Created by pcjbird on 15/5/27.
// Copyright (c) 2015年 Zero Status. All rights reserved.
//

#import "iOSHardwareInfoDataBase.h"
#import "NSString+StringRegular.h"
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_dl.h>

#define IOS_DEVICE_SPECIFICATIONS_GRID_URL @"http://www.blakespot.com/ios_device_specifications_grid.html"

@interface iOSHardwareInfoDataBase()
{
    BOOL _isReady;
}
@property(nonatomic, strong) NSMutableDictionary* db;
@end

@implementation iOSHardwareInfoDataBase

@synthesize isReady = _isReady;

+ (iOSHardwareInfoDataBase *) sharedInstance
{
    static iOSHardwareInfoDataBase* _sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (!_sharedInstance) {
            if (!_sharedInstance) _sharedInstance=[[iOSHardwareInfoDataBase alloc] init];
        }
    });
    return _sharedInstance;
}

-(id)init
{
    if (self =[super init]) {
        _isReady = FALSE;
        self.db = [NSMutableDictionary dictionary];
        dispatch_async(dispatch_get_global_queue(0, 0), ^(void){
            [self TryParse];
        });
    }
    return self;
}

-(NSString *)getMetaData
{
    NSURL *url = [NSURL URLWithString:IOS_DEVICE_SPECIFICATIONS_GRID_URL];
    NSData *data = [NSData dataWithContentsOfURL:url];
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}

-(void) TryParse
{
    NSFileManager*fileManager =[NSFileManager defaultManager];
    NSArray*paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString*documentsDirectory =[paths objectAtIndex:0];
    NSString*path =[documentsDirectory stringByAppendingPathComponent:@"hardware"];
    if([fileManager fileExistsAtPath:path])
    {
        NSData *jsonData = [[NSFileManager defaultManager] contentsAtPath:path];
        NSDictionary * db= [jsonData toJSONObject];
        [self.db addEntriesFromDictionary:db];
    }
    NSString *metaData = [self getMetaData];
    if (!metaData)
    {
        _isReady = TRUE;
        return;
    }
    NSRange rangeTable= [metaData rangeOfString:@"<table border=0 cellpadding=0 cellspacing=2>[\\s\\S]*</table>" options:NSRegularExpressionSearch];
    if (rangeTable.length <=0)
    {
        _isReady = TRUE;
        return;
    }
    [self.db removeAllObjects];
    NSString* tableStr = [[metaData substringWithRange:rangeTable] stringByReplacingOccurrencesOfString:@" " withString:@""];
    tableStr = [tableStr stringByReplacingOccurrencesOfString:@"<br>" withString:@" "];
    tableStr = [tableStr stringByReplacingOccurrencesOfString:@"# " withString:@""];
    
    NSMutableArray *infoArray=[tableStr substringByRegular:@"<tr[\\s\\S]*?>[\\s\\S]*?</tr>"];

    NSString *titleStr = [infoArray firstObject];
    NSMutableArray *titleArr = [titleStr substringByRegular:@"<td[\\s\\S]*?>[\\s\\S]*?</td>"];
    
    for (NSUInteger i = 0; i < [titleArr count]; i++)
    {
        NSString *title = [titleArr objectAtIndex:i];
        NSRange rangetd = [title rangeOfString:@"<td[\\s\\S]*?>" options:NSRegularExpressionSearch];
        title = [title stringByReplacingCharactersInRange:rangetd withString:@""];
        title = [title stringByReplacingOccurrencesOfString:@"</td>" withString:@" "];
        [titleArr replaceObjectAtIndex:i withObject:title];
    }
    
    [infoArray removeObjectAtIndex:0];
    [infoArray removeLastObject];
    
    for (NSString *deviceInfo in infoArray)
    {
        NSMutableArray *devices = [deviceInfo substringByRegular:@"<td[\\s\\S]*?>[\\s\\S]*?</td>"];
        
        for (NSUInteger i = 0; i < [devices count]; i++)         
        {
             NSString *val = [devices objectAtIndex:i];
             NSRange rangetd = [val rangeOfString:@"<td[\\s\\S]*?>" options:NSRegularExpressionSearch]; 
            val = [val stringByReplacingCharactersInRange:rangetd withString:@""];
             val = [val stringByReplacingOccurrencesOfString:@"</td>" withString:@" "]; 
            [devices replaceObjectAtIndex:i withObject:val];
         } 
        NSString *deviceKey = [devices objectAtIndex:1];
        NSArray* keyArr = [[deviceKey stringByReplacingOccurrencesOfString:@" " withString:@""] componentsSeparatedByString:@"•"];
         NSRange chRange = [[keyArr firstObject] rangeOfString:@"[\\D]*" options:NSRegularExpressionSearch]; 
        NSString* chs = [[keyArr firstObject] substringWithRange:chRange]; 
        for (NSString* _key in keyArr)
         { 
            if (_key && [_key length] > 0)
            {
                NSMutableDictionary *dict = [NSMutableDictionary dictionary];
                for (NSUInteger j = 0; j < [titleArr count]; j++)
                {
                    if (j != 1)
                    {
                        NSString *titleKey = [[titleArr objectAtIndex:j] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
                        NSString *deviceVal = [[devices objectAtIndex:j]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];;
                        [dict setObject:deviceVal forKey:titleKey];
                    }
                }
                NSString* dKey = _key;
                if ([dKey rangeOfString:chs].length == 0) dKey = [chs stringByAppendingString:dKey];
                [self.db setObject:dict forKey:dKey];
            }
        }
    }
    _isReady = TRUE;
    NSData *newJsonData = [DataParseUtil toJSONData:self.db];
    [newJsonData writeToFile:path atomically:YES];
}

- (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 stringWithCString:machine encoding:NSUTF8StringEncoding];
    free(machine);
    return platform;
}

-(NSDictionary *)currentDeviceInfo
{
    if (_isReady)
    {
        return [self.db objectForKey:[self platform]];
    }
    return nil;
}
@end

最後我們來寫下測試部分的程式碼。

   //在程式啟動時呼叫以下程式碼
   [iOSHardwareInfoDataBase sharedInstance];

   //在需要獲取裝置資訊的地方呼叫以下程式碼
   NSLog(@"current device info: %@", [[iOSHardwareInfoDataBase sharedInstance] currentDeviceInfo]);

希望這段分享對您有所幫助。

相關推薦

獲取當前IOS裝置CPU型號CPUGPUGPU螢幕解析度螢幕尺寸PPI資訊

今天和大家一起分享下如何獲取當前IOS裝置的CPU型號,CPU核數,GPU,GPU核數,螢幕解析度,螢幕尺寸,PPI等資訊。相信各位發現通過蘋果官方開放的API想要獲取當前裝置以上的一些資訊似乎做不到。如今蘋果的硬體更新速度相當的快,還要在網上發現有有心人收集了所有已釋出

IOS 獲取如電量CPU型號

#import <SystemConfiguration/CaptiveNetwork.h>     NSString *ssid = @"Not Found";     NSString *macIp = @"Not Found";     CFArrayRef myArray =

iOS 實時獲取當前應用消耗的CPU和記憶體

https://www.cnblogs.com/mobilefeng/p/4977783.html 這一遍文章對獲取app 消耗的CPU和記憶體問題的多種方案做了對比,沒有實際去測試。 1 獲取應用消耗的CPU float cpu_usage() { kern_return

android UDID獲取:android 裝置SN的獲取 續 android 裝置唯一碼的獲取CpuMac地址

http://blog.csdn.net/hpccn/article/details/7872141 這個方法使用中發現一些不完美的地方. -------------------------------------- 新的方法: 在使用命令列, adb device  a

利用JNI方法通過WMI獲取本地硬體資訊(主機板型號硬碟序列號CPU引數

因為有幾臺伺服器是windows 2000的,之前採用的WMIC方法不適用(windows 2003開始有),更不用說WMI .NET了(採用.NET Framework 3.5),只能採用JNI的方法,通過C++來呼叫本地WMI介面來查詢資料。幸好,這次WMI從windo

最新獲取iOS裝置型號大全(包括iphone7iphone7 Plus)

獲取iOS裝置型號,找了一圈發現一般寫的都不夠全,自己完善了一下。 呼叫記得加上標頭檔案: #import <sys/utsname.h> + (NSString*)deviceSt

[iOS]獲取裝置具體型號資訊

本文地址; http://blog.csdn.net/zhaoyabei/article/details/46697859 應用統計中有時候需要上傳裝置型號,如果這樣寫: [[UIDevice currentDevice] model] 獲得的裝置型號不是具體型號,如在iPho

[專案實踐] 在專案實戰中提升程式碼效率的的一次應用實踐-----使用列表解析式輸出當前android裝置CPU

1、先按照初學者思維程式碼應該是這樣的 1 #coding:utf-8 2 import os 3 text = os.popen("adb shell command cat /proc/cpuinfo",'r').read().split("\n") 4 i = 0 5 for j i

tensorflow獲取可用運算裝置(CPU,GPU)

Welcome To My Blog 正常來說,執行下面兩句會列印tensorflow能用的CPU和GPU from tensorflow.python.client import device_lib print(device_lib.list_local_devices())

linux檢視cpu型號記憶體大小磁碟空間的命令

轉自:http://www.jb51.net/article/97157.htm 1 檢視CPU 1.1 檢視CPU個數 #cat /proc/cpuinfo | grep “physical id” | uniq | wc -l 2 uniq命令:刪除重複行;wc –l命令

獲取當前電腦的cpu使用率、記憶體使用率

https://www.cnblogs.com/Chary/p/7771365.html http://www.cnblogs.com/zl1991/p/4679461.html 要關注幾個類 PerformanceCounter 用來針對cpu  ;ComputerInfo 用來針對

Linux 檢視CPU資訊機器型號記憶體資訊

系統 # uname -a # 檢視核心/作業系統/CPU資訊 # head -n 1 /etc/issue # 檢視作業系統版本 # cat /proc/cpuinfo # 檢視CPU資訊 # hostname

架構篇--系統監控--spring-boot2.0.X 系統原生資訊監控SQL資訊監控cpu溫度監控報警cup磁碟記憶體使用率監控報警自定義端點監控以及子節點獲取系統異常郵件通知

架構篇–系統監控–spring-boot2.0.X 系統原生資訊監控,SQL資訊監控,cpu溫度監控報警,cup磁碟記憶體使用率監控報警,自定義端點監控以及子節點獲取,加工原生端點,系統異常郵件通知,ui介面spring-boot-admin2.0整合等等內容

iOS 獲取當前時間並按照要求格式顯示

寫一個常用的獲取當前日期,時間的程式碼。並且能以規定的格式顯示出來 1 2 3 4 5 NSDate *currentDate = [NSDate date];//獲取當前時間,日期 N

C#獲取電腦的唯一標示UUID 非CPU型號 mac

在C# 裡面 有時候要用到獲取電腦問唯一標示 其他什麼獲取cpu mac地址  這些都是很大機會一樣的   通過我和同事的電腦進行測試  我的配件和他的配件一樣的   so 很多東西一樣  這裡獲取

iOS獲取手機型號iOS獲取當前app的名稱和版本號

NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; CFShow(infoDictionary); // app名稱 NSString *app_Name = [infoDi

iOS裝置CPU架構

模擬器: 4s-5: i386 5s-6s Plus: x86_64 真機(iOS裝置): 真機(iOS裝置): armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代) arm

iOS 裝置CPU的架構

模擬器: 4s-5: i386 5s-6s Plus: x86_64 真機(iOS裝置): armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代) armv7: iPhone 3Gs、iPh

IOS 獲取當前裝置IP地址

最近公司專案需要捕捉IOS裝置Ip,沒辦法,只能上網翻了翻相關資料。。以下就是捕捉IOS裝置IP的方法 #include <stdio.h> #include <stdlib.h> #include <string.h> #includ

iOS今天遇到一個問題就是獲取當前時間的年 月

在網上搜索以後整理了一下,以備後續檢視- (NSString *)getDateYearMonth {    NSDate *newDate = [NSDate date];NSCalendar *calendar = [NSCalendarcurrentCalendar];