IOSFunction
2015-11-13 14:36
579 查看
IOSFunction.h
IOSFunction.m
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface IOSFunction : NSObject #pragma mark - 获取参数 /** * @brief 获取唯一标示 * * @return 一个字符串,该字符串是由代码获取cfuuid唯一随机字符串, 然后把给字符串保存在共有的keychain中,保证唯一性的唯一识别字符串。 样例:328DCE39-C501-4195-B2CC-E2CEB069FAB0 */ +(NSString *)getUUID; /** * @brief 获取当前iOS操作系统的版本号 * * @return 字符串形式返回当前系统的版本号,样例:“7.0” */ +(NSString *)getSystemVersion; /** * @brief 获取设备类型 * * @return 设备类型的字符串:样例:"iPod_touch_5" */ +(NSString *)getDeviceType; /** * @brief 获取当前设备的mac地址 iOS7以下有效,iOS7以上也能使用,但是值都是一样的。 * * @return 返回设备的mac地址,样例:"70:11:24:4B:2B:5C" */ +(NSString *)getMacaddress; /** * @brief 获取设备的广告标示,通过设置,可以修改的一个标记,一般情况下不会变动。 可以跨应用,跨开发者访问。调用 ADSupport框架。只支持iOS6.0以上版本。 * * @return 一串广告标示字符串,样例:“B9031A0C-0E66-40EE-ACA4-3CCB30DB9F49” */ +(NSString *)getIdfa; /** * @brief 获取项目配置文件的配置信息 * * @return 字典Info.plist的内容 */ +(NSDictionary *)getProjectInfoPlist; #pragma mark - 常用基本方法 /** * @brief MD5加密方法 * * @param beforeMD5String 加密前的MD5字符串 * * @return 加密以后的MD5字符串 */ +(NSString *)getMD5StrFromString:(NSString *)beforeMD5String; /** * @brief 64位编码 * * @param input 64编码前的数据 * @param length 64位编码前的数据长度 * * @return 64位编码以后的字符串。 */ +(NSString *)encode:(const uint8_t *)input length:(NSInteger)length; /** * @brief 进行URL转码的方法 * * @param aString 需要进行URL转吗的字符串 * * @return URL转码以后的字符串 */ +(NSString *)urlEcodingFromString:(NSString *)aString; @end
IOSFunction.m
#import "IOSFunction.h" #import <SystemConfiguration/SystemConfiguration.h> #import "netdb.h" #import <CommonCrypto/CommonCrypto.h> #import <AdSupport/AdSupport.h>//idfa用的类库 #import <sys/socket.h> #import <sys/sysctl.h> #import <net/if.h> #import <net/if_dl.h> @implementation IOSFunction #pragma mark - 获取EFUNCfUUID +(NSString *)getUUID { CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault); NSString *cfuuidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid)); return cfuuidString; } #pragma mark - 获取时间戳 +(NSString *)getTimeStamp { double secondTime=[[[[NSDate alloc]init] autorelease]timeIntervalSince1970]; double millisecondTime=secondTime*1000; NSString * millisecondTimeStr=[NSString stringWithFormat:@"%f",millisecondTime]; NSRange pointRange=[millisecondTimeStr rangeOfString:@"."]; NSString * MSTime=[millisecondTimeStr substringToIndex:pointRange.location]; return MSTime; } #pragma mark - 获取当前iOS操作系统版本号 +(NSString *)getSystemVersion { NSString * systemversion=[[UIDevice currentDevice] systemVersion]; return systemversion; } #pragma mark - 获取当前设备类型 +(NSString *)getDeviceVersion { size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = (char *)malloc(size); sysctlbyname("hw.machine", machine, &size, NULL, 0); NSString *deviceType = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; free(machine); return deviceType; } +(NSString *)getDeviceType { NSString *deviceType = [self getDeviceVersion]; //iPhone if ([deviceType isEqualToString:@"iPhone1,1"]) { deviceType = @"iPhone"; } else if ([deviceType isEqualToString:@"iPhone1,2"]) { deviceType = @"iPhone_3G"; } else if ([deviceType isEqualToString:@"iPhone2,1"]) { deviceType = @"iPhone_3GS"; } else if ([deviceType isEqualToString:@"iPhone3,1"]) { deviceType = @"iPhone_4"; } else if ([deviceType isEqualToString:@"iPhone4,1"]) { deviceType = @"iPhone_4S"; } else if ([deviceType isEqualToString:@"iPhone5,1"]) { deviceType = @"iPhone_5"; } else if ([deviceType isEqualToString:@"iPod4,1"]) { deviceType = @"iPod_touch_4"; } else if ([deviceType isEqualToString:@"iPad3,2"]) { deviceType = @"iPad_3_3G"; } else if ([deviceType isEqualToString:@"iPad3,1"]) { deviceType = @"iPad_3_WiFi"; } else if ([deviceType isEqualToString:@"iPad2,2"]) { deviceType = @"iPad_2_3G"; } else if ([deviceType isEqualToString:@"iPad2,1"]) { deviceType = @"iPad_2_WiFi"; } else if ([deviceType isEqualToString:@"iPod5,1"]) { deviceType = @"iPod_touch_5"; } else if ([deviceType isEqualToString:@"iPad2,5"]) { deviceType = @"iPod_Mini"; } return deviceType; } #pragma mark - 获取MAC地址 +(NSString *)getMacaddress { int mib[6]; size_t len; char *buf; unsigned char *ptr; struct if_msghdr *ifm; struct sockaddr_dl *sdl; mib[0] = CTL_NET; mib[1] = AF_ROUTE; mib[2] = 0; mib[3] = AF_LINK; mib[4] = NET_RT_IFLIST; if ((mib[5] = if_nametoindex("en0")) == 0) { printf("Error: if_nametoindex error/n"); return NULL; } if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) { printf("Error: sysctl, take 1/n"); return NULL; } if ((buf = malloc(len)) == NULL) { printf("Could not allocate memory. error!/n"); return NULL; } if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) { printf("Error: sysctl, take 2"); return NULL; } ifm = (struct if_msghdr *)buf; sdl = (struct sockaddr_dl *)(ifm + 1); ptr = (unsigned char *)LLADDR(sdl); NSString *outstring = [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)]; // NSString *outstring = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x", // *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)]; free(buf); return [outstring uppercaseString]; } #pragma mark - 获取IDFA +(NSString *)getIdfa { NSString *idfaStr = nil; if ([[self getSystemVersion] intValue] >= 6) { idfaStr = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; } else { idfaStr = @""; } return idfaStr; } #pragma mark - 判断当前网络状态,是否联网 +(BOOL)connectedToNetWork { struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); SCNetworkReachabilityFlags flags; BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); CFRelease(defaultRouteReachability); if (!didRetrieveFlags) { printf("Error.Count not recover network reachability flags\n"); return NO; } BOOL isReachable = flags & kSCNetworkFlagsReachable; BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; return (isReachable && !needsConnection) ? YES : NO; } #pragma mark - 获取项目配置信息 +(NSDictionary *)getProjectInfoPlist { return [[NSBundle mainBundle]infoDictionary]; } #pragma mark - - - - - - - - - - #pragma mark - 进行md5加密 +(NSString *)getMD5StrFromString:(NSString *)beforeMD5String { const char * cString = [beforeMD5String UTF8String]; unsigned char result[16]; CC_MD5(cString, (CC_LONG)strlen((const char *)cString), result); NSString *sign= [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; return [sign uppercaseString]; } #pragma mark - 进行base64位转吗 +(NSString *)encode:(const uint8_t *)input length:(NSInteger)length { static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; NSMutableData *data = [NSMutableData dataWithLength:((length + 2) / 3) * 4]; uint8_t *output = (uint8_t *)data.mutableBytes; for (NSInteger i = 0; i < length; i += 3) { NSInteger value = 0; for (NSInteger j = i; j < (i + 3); j++) { value <<= 8; if (j < length) { value |= (0xFF & input[j]); } } NSInteger index = (i / 3) * 4; output[index + 0] = table[(value >> 18) & 0x3F]; output[index + 1] = table[(value >> 12) & 0x3F]; output[index + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; output[index + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; } return [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease]; } #pragma mark - URL转码 +(NSString *)urlEcodingFromString:(NSString *)aString { NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)aString, NULL, (CFStringRef)@";/?:@&=$+{}<>,", kCFStringEncodingUTF8); return result; } @end
相关文章推荐
- iOS二维码生成与扫描(zbar和原生AVFoundation)
- iOS8.0人性化的“通知中心”
- iOS- 利用AFNetworking(AFN) - 实现文件断点下载
- TextField和TextView字数超出截取问题
- iOS 游戏开发 博客
- iOS 开发笔记
- Xcode6版本iOS模拟器的相关路径
- iOS崩溃日志分析
- iOS tableView section 和cell 一同滚动的方法
- 复原iOS应用的权限设置
- 实际案例讲解iOS设计模式——MVC模式
- iOS 按钮超过父视图范围无法响应事件的处理方法
- iOS开发 -- 延时执行某个方法的几种方式的比较和汇总
- iOS9的新特性以及适配方案-----转载
- IOS 遍历导航器视图是否包含某一个视图
- iOS解析html
- ios NSFileManager 用法详解
- iOS沙盒路径的查看和使用
- iOS 隐藏顶部状态栏
- 【IOS学习】IOS开发之视图和视图控制器