Share with you today how to get the current iOS device CPU model ,CPU cores ,GPU,GPU cores , screen resolution , screen size , PPI and other information. I'm sure you'll find that the API, which is officially open through Apple, wants to get some information above the current device. Now Apple's hardware update speed is quite fast, but also on the internet to find a conscientious collection of all the published Apple devices related equipment information , and do not regularly go back to update. For details, see: Blake's IOS Device Specifications Grid
Http://www.blakespot.com/ios_device_specifications_grid.html
The author is lazy, so I borrowed this conscientious device information to help us get more IOS device information . Let's take a look at the code below.
First we add a category,nsstring+stringregular for nsstring.
//// nsstring+stringregular.h// hardwareinfo//// created by pcjbird on 15/5/27.// copyright (c) 2015 year 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 year 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
Next, let's implement ioshardwareinfodatabase.
//// ioshardwareinfodatabase.h// hardwareinfo//// created by pcjbird on 15/5/27.// copyright (c) 2015 year 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 year 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&nbsP;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:i os_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 ]) &NBSP;&NBSP;&NBSP;&NBSP;{&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;NSDATA&NBSP;*JSONDATA&Nbsp;= [[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 &NBSP;!=&NBSP;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
Finally, let's write down the code for the test section.
Call the following code when the program starts [Ioshardwareinfodatabase sharedinstance]; Call the following code where you need to obtain the device information NSLog (@ "Current device info:%@", [[Ioshardwareinfodatabase sharedinstance] currentdeviceinfo]);
I hope this share is helpful to you.
Get the current iOS device CPU model, CPU cores, GPU,GPU, screen resolution, screen size, PPI and more