获取APP和设备相关信息

APP NAME: [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]

APP BUILD: [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]

APP VERSION: [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]

设备版本号:[[[UIDevice currentDevice] systemVersion] integerValue]

+ (NSString * _Nonnull)uniqueIdentifier {//获取设备的uuid

    NSString *UUID;

    if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {

        UUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

    } else {

        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

        UUID = [defaults stringForKey:BFUniqueIdentifierDefaultsKey];

        if (!UUID) {

            UUID = [NSString generateUUID];

            [defaults setObject:UUID forKey:BFUniqueIdentifierDefaultsKey];

            [defaults synchronize];

        }

    }

    return UUID;

}

+ (NSString * _Nonnull)generateUUID {

    CFUUIDRef theUUID = CFUUIDCreate(NULL);

    CFStringRef string = CFUUIDCreateString(NULL, theUUID);

    CFRelease(theUUID);

    return (__bridge_transfer NSString *)string;

}

 

 

+ (NSNumber * _Nonnull)totalDiskSpace {//总共的硬盘大小

    NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil];

    return [attributes objectForKey:NSFileSystemSize];

}

 

+ (NSNumber * _Nonnull)freeDiskSpace {//可用的硬盘大小

    NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil];

    return [attributes objectForKey:NSFileSystemFreeSize];

}

+ (NSUInteger)getSysInfo:(uint)typeSpecifier {

//RAM大小,其中typeSpecifier为HW_MEMSIZE

//cpu大小,其中typeSpecifier为HW_NCPU

//总内存大小,其中typeSpecifier为HW_PHYSMEM

//用户内存,其中typeSpecifier为HW_USERMEM

    size_t size = sizeof(int);

    int results;

    int mib[2] = {CTL_HW, typeSpecifier};

    sysctl(mib, 2, &results, &size, NULL, 0);

    return (NSUInteger) results;

}

+ (NSString * _Nonnull)devicePlatform {//设备的类型(iphone,ipad,ipod,AppleTV)

    size_t size;

    sysctlbyname("hw.machine", NULL, &size, NULL, 0);

    char *machine = malloc(size);

    sysctlbyname("hw.machine", machine, &size, NULL, 0);

    NSString *platform = [NSString stringWithUTF8String:machine];

    free(machine);

    return platform;

}

 

+ (BOOL)isRetina {//是Retina屏幕

    if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0 || [UIScreen mainScreen].scale == 3.0)) {

        return YES;

    } else {

        return NO;

    }

}

 

+ (BOOL)isRetinaHD {//是RetinaHD屏幕

    if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 3.0)) {

        return YES;

    } else {

        return NO;

    }

}

 

+ (float)currentAppCPUUsage {//当前APPCPU资源

    kern_return_t kr;

    task_info_data_t tinfo;

    mach_msg_type_number_t task_info_count;

    

    task_info_count = TASK_INFO_MAX;

    kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)tinfo, &task_info_count);

    if (kr != KERN_SUCCESS) {

        return -1;

    }

    

    task_basic_info_t      basic_info;

    thread_array_t         thread_list;

    mach_msg_type_number_t thread_count;

    

    thread_info_data_t     thinfo;

    mach_msg_type_number_t thread_info_count;

    

    thread_basic_info_t basic_info_th;

    uint32_t stat_thread = 0;

    

    basic_info = (task_basic_info_t)tinfo;

    

    kr = task_threads(mach_task_self(), &thread_list, &thread_count);

    if (kr != KERN_SUCCESS) {

        return -1;

    }

    if (thread_count > 0) stat_thread += thread_count;

    

    long tot_sec = 0;

    long tot_usec = 0;

    float tot_cpu = 0;

    int j;

    

    for (j = 0; j < thread_count; j++) {

        thread_info_count = THREAD_INFO_MAX;

        kr = thread_info(thread_list[j], THREAD_BASIC_INFO, (thread_info_t)thinfo, &thread_info_count);

        if (kr != KERN_SUCCESS) {

            return -1;

        }

        

        basic_info_th = (thread_basic_info_t)thinfo;

        

        if (!(basic_info_th->flags & TH_FLAGS_IDLE)) {

            tot_sec = tot_sec + basic_info_th->user_time.seconds + basic_info_th->system_time.seconds;

            tot_usec = tot_usec + basic_info_th->system_time.microseconds + basic_info_th->system_time.microseconds;

            tot_cpu = tot_cpu + basic_info_th->cpu_usage / (float)TH_USAGE_SCALE * 100.0;

        }

    }

    

    kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));

    assert(kr == KERN_SUCCESS);

    

    return tot_cpu;

}

 

+ (BOOL)isJailBreak

{//是否越狱  

    BOOL cydia = NO;

    BOOL binBash = NO;

    NSString *filePath = @"/Applications/Cydia.app";

    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])

    {

        cydia = YES;

    }

    

    FILE * f = fopen("/bin/bash", "r");

    if (f != NULL)

    {

        binBash = YES;

    }

    fclose(f);

    

    if (cydia || binBash) {

        return YES;

    } else {

        return NO;

    }

}

 

//获取设备所连wifi信号强度

- (NSString*)fetchSSIDInfo {

    NSString *ssid = nil;

    NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();

    for (NSString *ifnam in ifs) {

        NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);

        if (info[@"SSID"]) {

            ssid = info[@"SSID"];

        }

    }

    return ssid;

}

 

//获得所连Wi-FiMac地址

- (NSString*)fetchBSSIDInfo {

    NSString *bssid = nil;

    NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();

    for (NSString *ifnam in ifs) {

        NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);

        if (info[@"BSSID"]) {

            bssid = info[@"BSSID"];

        }

    }

    //去除冒号

    return [bssid stringByReplacingOccurrencesOfString:@":" withString:@""];

}

 

//获取广播地址

-(NSString *)getIpAddressInfo{

    struct ifaddrs *interfaces = NULL;

    struct ifaddrs *temp_addr = NULL;

    NSString *address;

    getifaddrs(&interfaces);

    temp_addr = interfaces;

    while (temp_addr!=NULL) {

        NSString *ifa_name = [NSString stringWithUTF8String:temp_addr->ifa_name];

        if ([ifa_name isEqualToString:@"en0"]&&temp_addr->ifa_addr->sa_family == AF_INET) {

            unsigned int IP = ((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr.s_addr;

            unsigned int mask = ((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr.s_addr;

            myHost = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];

            unsigned int temp = (IP&mask)|(~mask);//计算广播地址

            struct in_addr inaddr;

            inaddr.s_addr = temp;

            address = [NSString stringWithUTF8String:inet_ntoa(inaddr)];

            return address;

        }

        temp_addr = temp_addr->ifa_next;

    }

    return nil;

}

posted @ 2016-07-18 11:54  程石亮  阅读(1123)  评论(0编辑  收藏  举报