123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- //
- // DeviceInfo.m
- // hello
- //
- // Created by 罗国 on 2019/1/25.
- //
- #import "DeviceInfo.h"
- #import "sys/utsname.h"
- //淘宝外网IP接口
- #define PUBLIC_IP_ADDRESS_API @"http://ip.taobao.com/service/getIpInfo.php?ip=myip"
- @implementation DeviceInfo
- + (NSString *)deviceVersion
- {
- struct utsname systemInfo;
- uname(&systemInfo);
- NSString * deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
- NSLog(@"device: %@", deviceString);
- //iPhone
- if ([deviceString isEqualToString:@"iPhone1,1"]) return @"iPhone 1G";
- if ([deviceString isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
- if ([deviceString isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
- if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
- if ([deviceString isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
- if ([deviceString isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
- if ([deviceString isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
- if ([deviceString isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
- if ([deviceString isEqualToString:@"iPhone5,3"]) return @"iPhone 5C";
- if ([deviceString isEqualToString:@"iPhone5,4"]) return @"iPhone 5C";
- if ([deviceString isEqualToString:@"iPhone6,1"]) return @"iPhone 5S";
- if ([deviceString isEqualToString:@"iPhone6,2"]) return @"iPhone 5S";
- if ([deviceString isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
- if ([deviceString isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
- if ([deviceString isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
- if ([deviceString isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
- if ([deviceString isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
- if ([deviceString isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
- if ([deviceString isEqualToString:@"iPhone10,1"]) return @"iPhone 8";
- if ([deviceString isEqualToString:@"iPhone10,4"]) return @"iPhone 8";
- if ([deviceString isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus";
- if ([deviceString isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus";
- if ([deviceString isEqualToString:@"iPhone10,3"]) return @"iPhone X";
- if ([deviceString isEqualToString:@"iPhone10,6"]) return @"iPhone X";
- if ([deviceString isEqualToString:@"iPhone11,2"]) return @"iPhone XS";
- if ([deviceString isEqualToString:@"iPhone11,4"]) return @"iPhone XS Max";
- if ([deviceString isEqualToString:@"iPhone11,6"]) return @"iPhone XS Max";
- if ([deviceString isEqualToString:@"iPhone11,8"]) return @"iPhone XR";
-
-
- return deviceString;
- }
- + (BOOL)isLessThanIphone6s
- {
- struct utsname systemInfo;
- uname(&systemInfo);
- NSString * deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
- NSLog(@"device: %@", deviceString);
-
- if ([deviceString isEqualToString:@"iPhone1,1"]) return YES;
- if ([deviceString isEqualToString:@"iPhone1,2"]) return YES;
- if ([deviceString isEqualToString:@"iPhone2,1"]) return YES;
- if ([deviceString isEqualToString:@"iPhone3,1"]) return YES;
- if ([deviceString isEqualToString:@"iPhone3,2"]) return YES;
- if ([deviceString isEqualToString:@"iPhone4,1"]) return YES;
- if ([deviceString isEqualToString:@"iPhone5,1"]) return YES;
- if ([deviceString isEqualToString:@"iPhone5,2"]) return YES;
- if ([deviceString isEqualToString:@"iPhone5,3"]) return YES;
- if ([deviceString isEqualToString:@"iPhone5,4"]) return YES;
- if ([deviceString isEqualToString:@"iPhone6,1"]) return YES;
- if ([deviceString isEqualToString:@"iPhone6,2"]) return YES;
- if ([deviceString isEqualToString:@"iPhone7,1"]) return YES;
- if ([deviceString isEqualToString:@"iPhone7,2"]) return YES;
- if ([deviceString isEqualToString:@"iPhone8,1"]) return YES;
-
- return NO;
- }
- + (BOOL)isAllDigits:(NSString *)str
- {
- NSCharacterSet* nonNumbers = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
- NSRange r = [str rangeOfCharacterFromSet: nonNumbers];
- return r.location == NSNotFound && str.length > 0;
- }
- +(BOOL)isProxyOpened
- {
- NSDictionary *proxySettings = (__bridge NSDictionary *)(CFNetworkCopySystemProxySettings());
- //NSLog(@"%@", proxySettings);
- NSArray *proxies = (__bridge NSArray *)(CFNetworkCopyProxiesForURL((__bridge CFURLRef _Nonnull)([NSURL URLWithString:@"http://www.baidu.com"]), (__bridge CFDictionaryRef _Nonnull)(proxySettings)));
- NSDictionary *settings = [proxies objectAtIndex:0];
- NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);
- NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);
- NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);
- if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"])
- {
- NSLog(@">>>>>>没有设置代理");
- return NO;
- }
-
- NSLog(@">>>>>>设置了代理");
- return YES;
- }
- +(BOOL)isVPNConnected
- {
- NSDictionary * proxySettings = (__bridge NSDictionary *)CFNetworkCopySystemProxySettings();
- //NSLog(@"%@", proxySettings);
- NSArray * keys = [proxySettings[@"__SCOPED__"] allKeys];
- for (NSString * key in keys)
- {
- if ([key rangeOfString:@"tap"].location != NSNotFound ||
- [key rangeOfString:@"tun"].location != NSNotFound ||
- [key rangeOfString:@"ppp"].location != NSNotFound) {
- NSLog(@">>>>>>开启了VPN");
- return YES;
- }
- }
-
- NSLog(@">>>>>>没有开启VPN");
- return NO;
- }
- +(BOOL)isSimuLator
- {
- return (TARGET_IPHONE_SIMULATOR == 1 && TARGET_OS_IPHONE == 1) ? YES: NO;
- }
- +(NSString *)getWANIPAdress
- {
- NSError *error;
- NSURL*url = [NSURL URLWithString:PUBLIC_IP_ADDRESS_API];
- NSMutableString*content = [NSMutableString stringWithContentsOfURL:url
- encoding:NSUTF8StringEncoding
- error:&error];
- if (content == nil )
- {
- return nil;
- }
-
- NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:[content dataUsingEncoding:NSUTF8StringEncoding]
- options:NSJSONReadingMutableContainers
- error:nil];
- if (dic == nil)
- {
- return nil;
- }
-
- return dic[@"data"][@"ip"];
- }
- //获取用户唯一的id, 有则从keychain 获取, 无则生成。
- +(NSString*)getDeviceId
- {
- NSString*groupId = [self getDeviceIdFromKeychain];
- if ((groupId == nil) || (groupId.length==0))
- {
- return [self generDeviceId];
- }
- return groupId;
- }
- // 从keychain 获取设备唯一标志
- +(NSString*)getDeviceIdFromKeychain
- {
- NSMutableDictionary *tempDic = (NSMutableDictionary *)[self load:@"GroupId"];
- if (tempDic == nil)
- {
- return nil;
- }
- return [tempDic objectForKey:kPDDictionaryKey];
- }
- // 生成设备id
- +(NSString*)generDeviceId
- {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- long lTime = tv.tv_sec * 1000 + tv.tv_usec / 1000;
- NSString*newGroupId = [NSString stringWithFormat:@"%ld",lTime];
- NSMutableDictionary *tempDic = [NSMutableDictionary dictionary];
- [tempDic setObject:newGroupId forKey:kPDDictionaryKey];
- [self save:@"GroupId" data:tempDic];
- return newGroupId;
- }
- static NSString * const kPDDictionaryKey = @"com.ssy.37chat.dictionaryKey";
- + (void)keyChainSave:(NSDictionary *)aDict
- {
- NSString *Key= [aDict objectForKey:@"key"];
- NSString *Value = [aDict objectForKey: @"value"];
- [self setKeyChainValue:Key withValue:Value];
- }
- + (void)setKeyChainValue:(NSString *)key withValue:( NSString *)value
- {
- if ((key != nil) && (value != nil))
- {
- NSMutableDictionary *tempDic = [NSMutableDictionary dictionary];
- [tempDic setObject:value forKey:kPDDictionaryKey];
- [self save:key data:tempDic];
- }
- }
- +(NSString *)getKeyChainValue:(NSString *)key
- {
- NSMutableDictionary *tempDic = (NSMutableDictionary *)[self load:key];
- return [tempDic objectForKey:kPDDictionaryKey];
- }
- +(NSString *)keyChainLoad:(NSDictionary *)aDict
- {
- NSString *kPDKeyChainKey= [aDict objectForKey:@"key"];
- return [self getKeyChainValue:kPDKeyChainKey];
- }
- + (void)keyChainDelete:(NSString *)kPDKeyChainKey{
- [self delete:kPDKeyChainKey];
- }
- + (NSMutableDictionary *)getKeychainQuery:(NSString *)service {
- return [NSMutableDictionary dictionaryWithObjectsAndKeys:
- (id)kSecClassGenericPassword,(id)kSecClass,
- service, (id)kSecAttrService,
- service, (id)kSecAttrAccount,
- (id)kSecAttrAccessibleAfterFirstUnlock,(id)kSecAttrAccessible,
- nil];
- }
- + (void)save:(NSString *)service data:(id)data {
- //Get search dictionary
- NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
- //Delete old item before add new item
- SecItemDelete((CFDictionaryRef)keychainQuery);
- //Add new object to search dictionary(Attention:the data format)
- [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData];
- //Add item to keychain with the search dictionary
- SecItemAdd((CFDictionaryRef)keychainQuery, NULL);
- }
- + (id)load:(NSString *)service {
- id ret = nil;
- NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
- //Configure the search setting
- //Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue
- [keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData];
- [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit];
- CFDataRef keyData = NULL;
- if (SecItemCopyMatching((CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {
- @try {
- ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData];
- } @catch (NSException *e) {
- NSLog(@"Unarchive of %@ failed: %@", service, e);
- } @finally {
- }
- }
- if (keyData)
- CFRelease(keyData);
- return ret;
- }
- + (void)delete:(NSString *)service {
- NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];
- SecItemDelete((CFDictionaryRef)keychainQuery);
- }
- //strTan 举例 7
- + (BOOL)isLessThan:(NSInteger)phoneVersion {
- struct utsname systemInfo;
- uname(&systemInfo);
- NSString * deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
-
- if(![deviceString hasPrefix:@"iPhone"]) {
- return NO;
- }
-
- NSArray *arr = [deviceString componentsSeparatedByString:@","];
- if(arr.count <= 1)
- return NO;
- NSString* sf = arr[0];
- sf = [sf stringByReplacingOccurrencesOfString:@"iPhone" withString:@""];
- if([sf integerValue] > 0 && [sf integerValue] <= phoneVersion)
- return YES;
-
- return NO;
- }
- @end
|