首页 > 其他分享 >ios CCUIDevice.m

ios CCUIDevice.m

时间:2024-07-20 11:28:01浏览次数:7  
标签:return cur get ios NSString device import CCUIDevice

//
//  CCUIDevice.h
//  CCFC
//
//


#import <Foundation/Foundation.h>
#import "CCConfig.h"
#import <mach/mach.h>


// 判断设备是480*320还是960*640
#define IS_RETINA \
    ([UIScreen instancesRespondToSelector:@selector(currentMode)] ?     \
        CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : \
        NO)


#define IS_MULTITASK_SUPPORT    \
        [[UIDevice currentDevice] isMultitaskingSupported]


@interface UIDevice(cc)
    
//获取OS版本
+ (NSString *)osVersion;
// 获取OS主版本号
+ (NSString *)osMajorVer;


// 获取OS子版本号
+ (NSString *)osMinorVer;


//振动设备
+ (void)vibrate;


// whether the device is retina
+ (BOOL)isRetina;


// whether the device supports multitask
+ (BOOL)isSupportsMultitask __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);


// not ok
// reboot the device
// if you don't have the permission, then "Operation not permitted" will be logged.
+ (int)reboot;


+ (void)disableAutoLock;
+ (void)enableAutoLock;


// create UUID
+ (NSString *)createUUID;


// get the WAN IP address of the device based on ios
+ (NSString *)getWANAddress;


// get the Wifi IP address of the device based on ios
+ (NSString *)getWifiAddress;


// get the IP address of the device based on ios by ifaName
+ (NSString *)getIPAddressBy:(NSString *)ifaName;


// get the host name
+ (NSString *)hostname;


// get the CPU info
+ (BOOL)cpuInfo:(vm_statistics_data_t *)cpuStats;


// get the boot time of the device
+ (NSDate *)bootTime;


// returns whether the device is jailbroken or not
+ (BOOL)isJailBroken;


// get the device version
+ (NSString *)deviceVersion;


#if CC_ENABLE_PRIVATE_API
+ (NSString *)buildVersion;     // eg, ios 4.3.3, returns @"8J2".


// get the imei string  // not ok
+ (NSString *)getImei;




#endif




@end

 

//
//  CCUIDevice.m
//  CCFC
//
//


#import "CCUIDevice.h"
#import "CCIOS.h"
#import "CCFileUtil.h"
#import <AudioToolbox/AudioToolbox.h>
#import <ifaddrs.h>
#import <arpa/inet.h>
#import <sys/sysctl.h>
#import <sys/utsname.h>


#if CC_ENABLE_PRIVATE_API
@interface UIDevice(ccPrivate)


- (NSString *)buildVersion;


@end
#endif




@implementation UIDevice(cc)


//获取OS版本
+ (NSString *)osVersion
{
    return [CCIOS osVersion];
}


// 获取OS主版本号
+ (NSString *)osMajorVer
{
    return [CCIOS osMajorVer];
}


// 获取OS子版本号
+ (NSString *)osMinorVer
{
    return [CCIOS osMinorVer];
}


//振动设备
+ (void)vibrate
{
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}


// whether the device is retina
+ (BOOL)isRetina
{
        if([UIScreen instancesRespondToSelector:@selector(currentMode)])
                return CGSizeEqualToSize(CGSizeMake(640,960), [[UIScreen mainScreen] currentMode].size); 
                
        return NO;
}


// whether the device supports multitask
+ (BOOL)isSupportsMultitask __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0)
{
        return [[UIDevice currentDevice] isMultitaskingSupported];
}


// not ok
// reboot the device
// if you don't have the permission, then "Operation not permitted" will be logged.
+ (int)reboot
{
        system("echo alpine | su root");
        return system("reboot");
}


+ (void)disableAutoLock
{
        [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}


+ (void)enableAutoLock
{
        [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
}


// create UUID
+ (NSString *)createUUID
{
        CFUUIDRef uuidObj = CFUUIDCreate(kCFAllocatorDefault);
        NSString *uuidStr = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidObj);
        CFRelease(uuidObj);
        
        return uuidStr;
}


// get the WAN IP address of the device based on ios
+ (NSString *)getWANAddress
{
    return [self getIPAddressBy:@"pdp_ip0"]; 
}


// get the Wifi IP address of the device based on ios
+ (NSString *)getWifiAddress
{
    return [self getIPAddressBy:@"en0"]; 
}


// get the IP address of the device based on ios by ifaName
+ (NSString *)getIPAddressBy:(NSString *)ifaName
{
    struct ifaddrs *addrs; 
    struct ifaddrs *cur; 
    
    if(!getifaddrs(&addrs))
        {
        cur = addrs; 
        while (cur != NULL) 
                { 
                        if(cur->ifa_addr->sa_family == AF_INET) 
            { 
                if (!strcmp(cur->ifa_name, [ifaName UTF8String]))    
                    return [NSString stringWithUTF8String:
                                                        inet_ntoa(((struct sockaddr_in *)cur->ifa_addr)->sin_addr)]; 
                
                        } 
            cur = cur->ifa_next; 
        } 
        freeifaddrs(addrs); 
    } 
    return nil; 
}


// get the host name
+ (NSString *)hostname
{
    char tempHostName[256]; 
    int success = gethostname(tempHostName, 255);
    if (success != 0) 
                return nil;
    tempHostName[255] = '\0';
    
#if TARGET_IPHONE_SIMULATOR
    return [NSString stringWithFormat:@"%s", tempHostName];
#else
    return [NSString stringWithFormat:@"%s.local", tempHostName];
#endif
}


// get the CPU info
+ (BOOL)cpuInfo:(vm_statistics_data_t *)cpuStats 
{ 
        mach_msg_type_number_t infoCount = HOST_CPU_LOAD_INFO_COUNT; 
        kern_return_t kernReturn = 
                host_statistics(mach_host_self(), 
                                                HOST_CPU_LOAD_INFO, 
                                                (host_info_t)cpuStats, 
                                                &infoCount); 
        
        return kernReturn == KERN_SUCCESS; 
} 


// get the boot time of the device
+ (NSDate *)bootTime
{
    size_t size = sizeof(struct timeval);
    struct timeval *time = malloc(sizeof(struct timeval));
    if(time == NULL)
                return nil;
    int mib[2] = {CTL_KERN, KERN_BOOTTIME};
    sysctl(mib, 2, time, &size, NULL, 0);
        
    NSDate *bootTm = [NSDate dateWithTimeIntervalSince1970:time->tv_sec];
    free(time);
    return  bootTm;
}


// returns whether the device is jailbroken or not
+ (BOOL)isJailBroken
{
        return [CCFileUtil isFileExist:@"/Applications/Cydia.app"];
}


// get the device version
+ (NSString *)deviceVersion
{
        struct utsname u;
        uname(&u);
        return [NSString stringWithUTF8String:u.machine];
}


#if CC_ENABLE_PRIVATE_API
+ (NSString *)buildVersion
{
        return [[UIDevice currentDevice] buildVersion];
}


// get the imei string  // not ok
+ (NSString *)getImei
{
        Class cls = NSClassFromString(@"NetworkController");
    return [[cls sharedInstance] IMEI];
}


#endif


@end


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

标签:return,cur,get,ios,NSString,device,import,CCUIDevice
From: https://blog.csdn.net/cxsjabcabc/article/details/7183025

相关文章

  • 02-使用BIOS中断 显示字符/读取磁盘 【实现boot中加载loader的功能】
    bios提供了一组服务,可以帮助我们操纵硬件,避免我们直接与硬件细节打交道当触发软中断时,会自动从中断向量表中取出想用的中断程序的首地址,来执行中断程序,参数通过寄存器传递一、Bios的INT10中断INT10中断是BIOS用于控制显示屏的关键接口,包括设置显示器模式、光标管理和显......
  • 杂谈-iOS马甲包
    什么是马甲包马甲包一般是主APP的分身或者克隆,也或者说是穿着马甲的一个APP,脱掉马甲,APP将呈现另一种样式,也就是常说的AB面APP。1、主APP的分身或者克隆类型的马甲包先说第一种就是主APP的分身或者克隆,现在很公司一般有一个自己的主产品,但是也会去做一些和主APP类似的阉割版......
  • 【C++】C++标准库iostream中cin、cout、cerr、clog方法解析
    目录一.iostream库介绍1.iostream主要的组件2.使用 iostream 二.cin介绍及使用三.cout介绍及使用四.cerr介绍及使用五.clog介绍及使用一.iostream库介绍1.iostream主要的组件在C++中, iostream 是一个非常核心的头文件,它定义了基本的输入输出流。这个头文件是......
  • iOS开发基础133-GCD相关
    先看一段代码,这是项目中图片上传的一部分代码。//开启线程组上传图片dispatch_group_tgroup=dispatch_group_create();[self.selectedPhotosenumerateObjectsUsingBlock:^(UIImage*_Nonnullobj,NSUIntegeridx,BOOL*_Nonnullstop){dispatch_gro......
  • iOS开发基础133-崩溃预防
    现代移动应用的用户体验依赖于其稳定性和可靠性。然而,在开发过程中,我们时常会遇到各种崩溃问题。崩溃不仅会影响用户的使用体验,还可能损害应用的声誉。因此,本文将详细介绍一个名为CrashPrevention的工具类,它能够为iOS开发者提供多方面的崩溃预防措施,借助该工具类,开发者能够有效减......
  • iOS开发基础132-POSIX线程库
    POSIX线程库,通常称为Pthreads(POSIXThreads),是一个基于POSIX标准的多线程编程接口。它为多线程应用程序提供了一组标准化的API,兼容多个UNIX系统,包括Linux、macOS等。POSIX线程库概览POSIX线程库主要包括以下几个组成部分:线程管理:创建和操作线程。线程同步:互斥锁(mut......
  • iOS开发基础131-isa指针
    iOS中isa指针是Objective-C对象内部的一个重要概念,它是实现对象与类之间关系的核心机制。深入理解isa指针对掌握Objective-C的底层运行机制和对象模型非常重要。1.什么是isa指针每个Objective-C对象都有一个isa指针,它指向这个对象所属的类。类本身也有一个isa指针,指向其元类(met......
  • iOS开发基础129-音频录制上传
    在Objective-C中,音频录制过程涉及几个关键步骤,包括配置录音设置、创建和启动录音机、处理录音会话以及将录制的音频文件上传到服务器。下面是一个详细的示例,包括创建一个简单的音频录制应用,以及将录制的音频文件上传到服务器的代码。1.设置音频会话我们需要使用AVFoundation框......
  • iOS开发基础127-深入探讨KVO
    一、基础KVO(Key-ValueObserving,键值观察)是Cocoa提供的一种机制,它允许我们观察属性的变化并做出响应。这种机制非常强大,广泛应用于各种编程场景,如数据绑定、状态变化监控等。在深入了解KVO之前,我们先从KVO的基本概念开始,然后逐步探讨其深层次应用和一些使用实践的注意事项......
  • 在 PowerShell 中Get-WmiObject Win32_PhysicalMemory,SMBIOSMemoryType 是一种用于描
    在PowerShell中Get-WmiObjectWin32_PhysicalMemory,SMBIOSMemoryType是一种用于描述系统中物理内存类型的属性。数字26表示特定的内存类型,具体为DDR4内存。每种内存类型在SMBIOS(SystemManagementBIOS)规范中都有一个对应的数字码,用来标识不同类型的内存。以下是一些常见......