您的位置:首页 > 移动开发 > IOS开发

IOSFunction

2015-11-13 14:36 579 查看
IOSFunction.h

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: