iOS 获取设备常用信息

536 阅读2分钟

获取系统版本

+ (NSString *)getCurrentSystemVersion
{
    return [[UIDevice currentDevice] systemVersion];
}

获取手机model

+ (NSString *)getCurrentDevicePhoneModel{
    struct utsname systemInfo;
    uname(&systemInfo);
    
    NSString *deviceModel = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
    
    
    if ([deviceModel isEqualToString:@"iPhone3,1"])    return @"iPhone4";
    if ([deviceModel isEqualToString:@"iPhone3,2"])    return @"iPhone4";
    if ([deviceModel isEqualToString:@"iPhone3,3"])    return @"iPhone4";
    if ([deviceModel isEqualToString:@"iPhone4,1"])    return @"iPhone4S";
    if ([deviceModel isEqualToString:@"iPhone5,1"])    return @"iPhone5";
    if ([deviceModel isEqualToString:@"iPhone5,2"])    return @"iPhone5(GSM+CDMA)";
    if ([deviceModel isEqualToString:@"iPhone5,3"])    return @"iPhone5c(GSM)";
    if ([deviceModel isEqualToString:@"iPhone5,4"])    return @"iPhone5c(GSM+CDMA)";
    if ([deviceModel isEqualToString:@"iPhone6,1"])    return @"iPhone5s(GSM)";
    if ([deviceModel isEqualToString:@"iPhone6,2"])    return @"iPhone5s(GSM+CDMA)";
    if ([deviceModel isEqualToString:@"iPhone7,1"])    return @"iPhone6Plus";
    if ([deviceModel isEqualToString:@"iPhone7,2"])    return @"iPhone6";
    if ([deviceModel isEqualToString:@"iPhone8,1"])    return @"iPhone6s";
    if ([deviceModel isEqualToString:@"iPhone8,2"])    return @"iPhone6sPlus";
    if ([deviceModel isEqualToString:@"iPhone8,4"])    return @"iPhoneSE";
    // 日行两款手机型号均为日本独占,可能使用索尼FeliCa支付方案而不是苹果支
    if ([deviceModel isEqualToString:@"iPhone9,1"])    return @"iPhone7";
    if ([deviceModel isEqualToString:@"iPhone9,2"])    return @"iPhone7Plus";
    if ([deviceModel isEqualToString:@"iPhone9,3"])    return @"iPhone7";
    if ([deviceModel isEqualToString:@"iPhone9,4"])    return @"iPhone7Plus";
    if ([deviceModel isEqualToString:@"iPhone10,1"])   return @"iPhone8";
    if ([deviceModel isEqualToString:@"iPhone10,4"])   return @"iPhone8";
    if ([deviceModel isEqualToString:@"iPhone10,2"])   return @"iPhone8Plus";
    if ([deviceModel isEqualToString:@"iPhone10,5"])   return @"iPhone8Plus";
    if ([deviceModel isEqualToString:@"iPhone10,3"])   return @"iPhoneX";
    if ([deviceModel isEqualToString:@"iPhone10,6"])   return @"iPhoneX";
    if ([deviceModel isEqualToString:@"iPhone11,8"])   return @"iPhoneXR";
    if ([deviceModel isEqualToString:@"iPhone11,2"])   return @"iPhoneXS";
    if ([deviceModel isEqualToString:@"iPhone11,6"])   return @"iPhoneXSMax";
    if ([deviceModel isEqualToString:@"iPhone11,4"])   return @"iPhoneXSMax";
    if ([deviceModel isEqualToString:@"i386"])         return @"Simulator";
    if ([deviceModel isEqualToString:@"x86_64"])       return @"Simulator";
    return deviceModel;
}

获取包名

+ (NSString *)getAppBundleId {
    NSBundle *currentBundle = [NSBundle mainBundle];
    NSDictionary *infoDictionary = [currentBundle infoDictionary];
    return [infoDictionary objectForKey:@"CFBundleIdentifier"];
}

获取版本号

+ (NSString *)currentVersion {
    return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
}

获取build号

+ (NSString *)currentBulidVersion {
    return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
}

查看是否开启代理

+ (NSString *)fetchHttpProxy {
    CFDictionaryRef dicRef = CFNetworkCopySystemProxySettings();
    const CFStringRef proxyCFstr = (const CFStringRef)CFDictionaryGetValue(dicRef,
                                                                           (const void*)kCFNetworkProxiesHTTPProxy);
    NSString* proxy = (__bridge NSString *)proxyCFstr;
    if (proxy.length>0) {
        return @"1";
    }else {
        return @"0";
    }
}

判断手机是否越狱

#pragma mark - 判断是否越狱
+ (NSString *)isJailbroken {
    BOOL isJaiBroken = [self Jailbroken];
    
    if (isJaiBroken) {
        return @"1";
    } else {
        return @"0";
    }
}
+ (BOOL)Jailbroken {
    const char *examineBreak_Tool_pathes[] = {
        "/Applications/Cydia.app",
        "/Library/MobileSubstrate/MobileSubstrate.dylib",
        "/bin/bash",
        "/usr/sbin/sshd",
        "/etc/apt"
    };
    
    // 判断是否存在越狱文件
    for (int i = 0; i < 5; i++) {
        if ([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithUTF8String:examineBreak_Tool_pathes[i]]]){
            return (YES) && checkInject();
        }
    }
    return (NO) && checkInject();
}

bool checkInject(void) {
    int ret ;
    Dl_info dylib_info;
    const char * string = NULL;
    int    (*func_stat)(const char *, struct stat *) = stat;
    if ((ret = dladdr(func_stat, &dylib_info))) {
        string = dylib_info.dli_fname;
    }
    
    NSString *tmpStr = [[NSString alloc] initWithUTF8String:string];
    
    if ([tmpStr isEqualToString:@"/usr/lib/system/libsystem_kernel.dylib"]) {
        return NO ;
    } else {
        return YES;
    }
}