- 浏览: 224739 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
15197442045:
求demo,谢谢
IOS 后台执行代码(voip socket) -
15197442045:
我用了你这种方式,还是不能后台运行~~~~~
IOS 后台执行代码(voip socket) -
wlpych:
这个m_socket,从哪获得啊,什么方法?用的pjsip。求 ...
IOS 后台执行代码(voip socket)
获取ios设备信息
#import <UIKit/UIKit.h>
@interface UIDevice (Info)
+ (NSString *) device; //设备类型(x86_64 iPod5,1)
+ (NSString *) deviceModel; //设备模式(iPad iPod iPhone)
+ (NSString *) osVersion; //系统版本
+ (NSString *) os; //平台
+ (NSString *) carrier; //运营商
+ (NSString *) resolution; //分辨率
+ (NSString *) locale; //地域
+ (NSString *) appVersion; //程序版本
+ (NSNumber *) timestamp; //unix timestamp
+ (NSString *) cpuType; //cpu型号
+ (NSString *) cpuFrequency; //cpu频率
+ (NSUInteger) cpuCount; //cpu核数
+ (NSArray *) cpuUsage; //cpu利用率
+ (NSUInteger) totalMemoryBytes; //获取手机内存总量,返回的是字节数
+ (NSUInteger) freeMemoryBytes; //获取手机可用内存,返回的是字节数
+ (long long) freeDiskSpaceBytes; //获取手机硬盘空闲空间,返回的是字节数
+ (long long) totalDiskSpaceBytes; //获取手机硬盘总空间,返回的是字节数
+ (BOOL ) isJailBreak; //是否越狱
+ (BOOL ) bluetoothCheck; //是否支持蓝牙
@end
import "UIDevice+Info.h"
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
#import <mach/mach.h>
#import <mach/mach_host.h>
#import <sys/types.h>
#import <sys/param.h>
#import <sys/mount.h>
#import <mach/processor_info.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/stat.h>
#include <net/if.h>
#include <net/if_dl.h>
#define IFPGA_NAMESTRING @"iFPGA"
#define IPHONE_1G_NAMESTRING @"iPhone 1G"
#define IPHONE_3G_NAMESTRING @"iPhone 3G"
#define IPHONE_3GS_NAMESTRING @"iPhone 3GS"
#define IPHONE_4_NAMESTRING @"iPhone 4"
#define IPHONE_4S_NAMESTRING @"iPhone 4S"
#define IPHONE_5_NAMESTRING @"iPhone 5"
#define IPHONE_UNKNOWN_NAMESTRING @"Unknown iPhone"
#define IPOD_1G_NAMESTRING @"iPod touch 1G"
#define IPOD_2G_NAMESTRING @"iPod touch 2G"
#define IPOD_3G_NAMESTRING @"iPod touch 3G"
#define IPOD_4G_NAMESTRING @"iPod touch 4G"
#define IPOD_UNKNOWN_NAMESTRING @"Unknown iPod"
#define IPAD_1G_NAMESTRING @"iPad 1G"
#define IPAD_2G_NAMESTRING @"iPad 2G"
#define IPAD_3G_NAMESTRING @"iPad 3G"
#define IPAD_4G_NAMESTRING @"iPad 4G"
#define IPAD_UNKNOWN_NAMESTRING @"Unknown iPad"
#define APPLETV_2G_NAMESTRING @"Apple TV 2G"
#define APPLETV_3G_NAMESTRING @"Apple TV 3G"
#define APPLETV_4G_NAMESTRING @"Apple TV 4G"
#define APPLETV_UNKNOWN_NAMESTRING @"Unknown Apple TV"
#define IOS_FAMILY_UNKNOWN_DEVICE @"Unknown iOS device"
#define SIMULATOR_NAMESTRING @"iPhone Simulator"
#define SIMULATOR_IPHONE_NAMESTRING @"iPhone Simulator"
#define SIMULATOR_IPAD_NAMESTRING @"iPad Simulator"
#define SIMULATOR_APPLETV_NAMESTRING @"Apple TV Simulator" //
//iPhone 3G 以后各代的CPU型号和频率
#define IPHONE_3G_CPUTYPE @"ARM11"
#define IPHONE_3G_CPUFREQUENCY @"412MHz"
#define IPHONE_3GS_CPUTYPE @"ARM Cortex A8"
#define IPHONE_3GS_CPUFREQUENCY @"600MHz"
#define IPHONE_4_CPUTYPE @"Apple A4"
#define IPHONE_4_CPUFREQUENCY @"1GMHz"
#define IPHONE_4S_CPUTYPE @"Apple A5 Double Core"
#define IPHONE_4S_CPUFREQUENCY @"800MHz"
//iPod touch 4G 的CPU型号和频率
#define IPOD_4G_CPUTYPE @"Apple A4"
#define IPOD_4G_CPUFREQUENCY @"800MHz"
#define IOS_CPUTYPE_UNKNOWN @"Unknown CPU type"
#define IOS_CPUFREQUENCY_UNKNOWN @"Unknown CPU frequency"
typedef enum {
UIDeviceUnknown,
UIDeviceSimulator,
UIDeviceSimulatoriPhone,
UIDeviceSimulatoriPad,
UIDeviceSimulatorAppleTV,
UIDevice1GiPhone,
UIDevice3GiPhone,
UIDevice3GSiPhone,
UIDevice4iPhone,
UIDevice4SiPhone,
UIDevice5iPhone,
UIDevice1GiPod,
UIDevice2GiPod,
UIDevice3GiPod,
UIDevice4GiPod,
UIDevice1GiPad,
UIDevice2GiPad,
UIDevice3GiPad,
UIDevice4GiPad,
UIDeviceAppleTV2,
UIDeviceAppleTV3,
UIDeviceAppleTV4,
UIDeviceUnknowniPhone,
UIDeviceUnknowniPod,
UIDeviceUnknowniPad,
UIDeviceUnknownAppleTV,
UIDeviceIFPGA,
} UIDevicePlatform;
typedef enum {
UIDeviceFamilyiPhone,
UIDeviceFamilyiPod,
UIDeviceFamilyiPad,
UIDeviceFamilyAppleTV,
UIDeviceFamilyUnknown,
} UIDeviceFamily;
@implementation UIDevice (Info)
+ (NSString *)device
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
charchar *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithUTF8String:machine];
free(machine);
return platform;
}
+ (NSString *) deviceModel
{
NSString *model = [[UIDevice currentDevice] model];
if ([model hasPrefix:@"iPad"]) {
return @"iPad";
} else if ([model hasPrefix:@"iPod"]) {
return @"iPod";
} else if ([model hasPrefix:@"iPhone"]){
return @"iPhone";
}
return nil;
}
+ (NSString *)osVersion
{
return [[UIDevice currentDevice] systemVersion];
}
+ (NSString*)os
{
return @"iOS";
}
+ (NSString *)carrier
{
if (NSClassFromString(@"CTTelephonyNetworkInfo"))
{
CTTelephonyNetworkInfo *netinfo = [[[CTTelephonyNetworkInfo alloc] init] autorelease];
CTCarrier *carrier = [netinfo subscriberCellularProvider];
return [carrier carrierName];
}
return @"";
}
+ (NSString *)resolution
{
CGRect bounds = [[UIScreen mainScreen] bounds];
CGFloat scale = [[UIScreen mainScreen] respondsToSelector:@selector(scale)] ? [[UIScreen mainScreen] scale] : 1.f;
CGSize res = CGSizeMake(bounds.size.width * scale, bounds.size.height * scale);
NSString *result = [NSString stringWithFormat:@"%gx%g", res.width, res.height];
return result;
}
+ (NSString *)locale
{
return [[NSLocale currentLocale] localeIdentifier];
}
+ (NSString *)appVersion
{
return [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
}
+ (NSNumber *)timestamp
{
return [NSNumber numberWithLong:time(NULL)];
}
#pragma mark sysctlbyname utils
+ (NSString *) getSysInfoByName:(charchar *)typeSpecifier
{
size_t size;
sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);
charchar *answer = malloc(size);
sysctlbyname(typeSpecifier, answer, &size, NULL, 0);
NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];
free(answer);
return results;
}
#pragma mark platform information
+ (NSString *) platform
{
return [self getSysInfoByName:"hw.machine"];
}
+ (NSUInteger) platformType
{
NSString *platform = [self platform];
// The ever mysterious iFPGA
if ([platform isEqualToString:@"iFPGA"]) return UIDeviceIFPGA;
// iPhone
if ([platform isEqualToString:@"iPhone1,1"]) return UIDevice1GiPhone;
if ([platform isEqualToString:@"iPhone1,2"]) return UIDevice3GiPhone;
if ([platform hasPrefix:@"iPhone2"]) return UIDevice3GSiPhone;
if ([platform hasPrefix:@"iPhone3"]) return UIDevice4iPhone;
if ([platform hasPrefix:@"iPhone4"]) return UIDevice4SiPhone;
if ([platform hasPrefix:@"iPhone5"]) return UIDevice5iPhone;
// iPod
if ([platform hasPrefix:@"iPod1"]) return UIDevice1GiPod;
if ([platform hasPrefix:@"iPod2"]) return UIDevice2GiPod;
if ([platform hasPrefix:@"iPod3"]) return UIDevice3GiPod;
if ([platform hasPrefix:@"iPod4"]) return UIDevice4GiPod;
// iPad
if ([platform hasPrefix:@"iPad1"]) return UIDevice1GiPad;
if ([platform hasPrefix:@"iPad2"]) return UIDevice2GiPad;
if ([platform hasPrefix:@"iPad3"]) return UIDevice3GiPad;
if ([platform hasPrefix:@"iPad4"]) return UIDevice4GiPad;
// Apple TV
if ([platform hasPrefix:@"AppleTV2"]) return UIDeviceAppleTV2;
if ([platform hasPrefix:@"AppleTV3"]) return UIDeviceAppleTV3;
if ([platform hasPrefix:@"iPhone"]) return UIDeviceUnknowniPhone;
if ([platform hasPrefix:@"iPod"]) return UIDeviceUnknowniPod;
if ([platform hasPrefix:@"iPad"]) return UIDeviceUnknowniPad;
if ([platform hasPrefix:@"AppleTV"]) return UIDeviceUnknownAppleTV;
// Simulator thanks Jordan Breeding
if ([platform hasSuffix:@"86"] || [platform isEqual:@"x86_64"])
{
BOOL smallerScreen = [[UIScreen mainScreen] bounds].size.width < 768;
return smallerScreen ? UIDeviceSimulatoriPhone : UIDeviceSimulatoriPad;
}
return UIDeviceUnknown;
}
+ (NSString *) platformString
{
switch ([self platformType])
{
case UIDevice1GiPhone: return IPHONE_1G_NAMESTRING;
case UIDevice3GiPhone: return IPHONE_3G_NAMESTRING;
case UIDevice3GSiPhone: return IPHONE_3GS_NAMESTRING;
case UIDevice4iPhone: return IPHONE_4_NAMESTRING;
case UIDevice4SiPhone: return IPHONE_4S_NAMESTRING;
case UIDevice5iPhone: return IPHONE_5_NAMESTRING;
case UIDeviceUnknowniPhone: return IPHONE_UNKNOWN_NAMESTRING;
case UIDevice1GiPod: return IPOD_1G_NAMESTRING;
case UIDevice2GiPod: return IPOD_2G_NAMESTRING;
case UIDevice3GiPod: return IPOD_3G_NAMESTRING;
case UIDevice4GiPod: return IPOD_4G_NAMESTRING;
case UIDeviceUnknowniPod: return IPOD_UNKNOWN_NAMESTRING;
case UIDevice1GiPad : return IPAD_1G_NAMESTRING;
case UIDevice2GiPad : return IPAD_2G_NAMESTRING;
case UIDevice3GiPad : return IPAD_3G_NAMESTRING;
case UIDevice4GiPad : return IPAD_4G_NAMESTRING;
case UIDeviceUnknowniPad : return IPAD_UNKNOWN_NAMESTRING;
case UIDeviceAppleTV2 : return APPLETV_2G_NAMESTRING;
case UIDeviceAppleTV3 : return APPLETV_3G_NAMESTRING;
case UIDeviceAppleTV4 : return APPLETV_4G_NAMESTRING;
case UIDeviceUnknownAppleTV: return APPLETV_UNKNOWN_NAMESTRING;
case UIDeviceSimulator: return SIMULATOR_NAMESTRING;
case UIDeviceSimulatoriPhone: return SIMULATOR_IPHONE_NAMESTRING;
case UIDeviceSimulatoriPad: return SIMULATOR_IPAD_NAMESTRING;
case UIDeviceSimulatorAppleTV: return SIMULATOR_APPLETV_NAMESTRING;
case UIDeviceIFPGA: return IFPGA_NAMESTRING;
default: return IOS_FAMILY_UNKNOWN_DEVICE;
}
}
#pragma mark sysctl utils
+ (NSUInteger) getSysInfo: (uint) typeSpecifier
{
size_t size = sizeof(int);
int results;
int mib[2] = {CTL_HW, typeSpecifier};
sysctl(mib, 2, &results, &size, NULL, 0);
return (NSUInteger) results;
}
#pragma mark cpu information
+ (NSString *) cpuType
{
switch ([self platformType])
{
case UIDevice3GiPhone: return IPHONE_3G_CPUTYPE;
case UIDevice3GSiPhone: return IPHONE_3GS_CPUTYPE;
case UIDevice4iPhone: return IPHONE_4_CPUTYPE;
case UIDevice4SiPhone: return IPHONE_4S_CPUTYPE;
case UIDevice4GiPod: return IPOD_4G_CPUTYPE;
default: return IOS_CPUTYPE_UNKNOWN;
}
}
+ (NSString *) cpuFrequency
{
switch ([self platformType])
{
case UIDevice3GiPhone: return IPHONE_3G_CPUFREQUENCY;
case UIDevice3GSiPhone: return IPHONE_3GS_CPUFREQUENCY;
case UIDevice4iPhone: return IPHONE_4_CPUFREQUENCY;
case UIDevice4SiPhone: return IPHONE_4S_CPUFREQUENCY;
case UIDevice4GiPod: return IPOD_4G_CPUFREQUENCY;
default: return IOS_CPUFREQUENCY_UNKNOWN;
}
}
+ (NSUInteger) cpuCount
{
return [self getSysInfo:HW_NCPU];
}
+ (NSArray *)cpuUsage
{
NSMutableArray *usage = [NSMutableArray array];
// float usage = 0;
processor_info_array_t _cpuInfo, _prevCPUInfo = nil;
mach_msg_type_number_t _numCPUInfo, _numPrevCPUInfo = 0;
unsigned _numCPUs;
NSLock *_cpuUsageLock;
int _mib[2U] = { CTL_HW, HW_NCPU };
size_t _sizeOfNumCPUs = sizeof(_numCPUs);
int _status = sysctl(_mib, 2U, &_numCPUs, &_sizeOfNumCPUs, NULL, 0U);
if(_status)
_numCPUs = 1;
_cpuUsageLock = [[NSLock alloc] init];
natural_t _numCPUsU = 0U;
kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &_numCPUsU, &_cpuInfo, &_numCPUInfo);
if(err == KERN_SUCCESS) {
[_cpuUsageLock lock];
for(unsigned i = 0U; i < _numCPUs; ++i) {
Float32 _inUse, _total;
if(_prevCPUInfo) {
_inUse = (
(_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER])
+ (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM])
+ (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE])
);
_total = _inUse + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]);
} else {
_inUse = _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];
_total = _inUse + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];
}
// NSLog(@"Core : %u, Usage: %.2f%%", i, _inUse / _total * 100.f);
float u = _inUse / _total * 100.f;
[usage addObject:[NSNumber numberWithFloat:u]];
}
[_cpuUsageLock unlock];
if(_prevCPUInfo) {
size_t prevCpuInfoSize = sizeof(integer_t) * _numPrevCPUInfo;
vm_deallocate(mach_task_self(), (vm_address_t)_prevCPUInfo, prevCpuInfoSize);
}
_prevCPUInfo = _cpuInfo;
_numPrevCPUInfo = _numCPUInfo;
_cpuInfo = nil;
_numCPUInfo = 0U;
} else {
NSLog(@"Error!");
}
return usage;
}
#pragma mark memory information
+ (NSUInteger) totalMemoryBytes
{
return [self getSysInfo:HW_PHYSMEM];
}
+ (NSUInteger) freeMemoryBytes
{
mach_port_t host_port = mach_host_self();
mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
vm_size_t pagesize;
vm_statistics_data_t vm_stat;
host_page_size(host_port, &pagesize);
if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) NSLog(@"Failed to fetch vm statistics");
// natural_t mem_used = (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count) * pagesize;
natural_t mem_free = vm_stat.free_count * pagesize;
// natural_t mem_total = mem_used + mem_free;
return mem_free;
}
#pragma mark disk information
+ (long long) freeDiskSpaceBytes
{
struct statfs buf;
long long freespace;
freespace = 0;
if(statfs("/private/var", &buf) >= 0){
freespace = (long long)buf.f_bsize * buf.f_bfree;
}
return freespace;
}
+ (long long) totalDiskSpaceBytes
{
struct statfs buf;
long long totalspace;
totalspace = 0;
if(statfs("/private/var", &buf) >= 0){
totalspace = (long long)buf.f_bsize * buf.f_blocks;
}
return totalspace;
}
+ (BOOL) isJailBreak
{
// int res = access("/var/mobile/Library/AddressBook/AddressBook.sqlitedb", F_OK);
// if (res != 0)
// return NO;
// return YES;
BOOL jailbroken = NO;
NSString *cydiaPath = @"/Applications/Cydia.app";
NSString *aptPath = @"/private/var/lib/apt/";
if ([[NSFileManager defaultManager] fileExistsAtPath:cydiaPath]) {
jailbroken = YES;
}
if ([[NSFileManager defaultManager] fileExistsAtPath:aptPath]) {
jailbroken = YES;
}
return jailbroken;
}
#pragma mark bluetooth information
+ (BOOL) bluetoothCheck
{
switch ([self platformType])
{
case UIDevice3GiPhone: return YES;
case UIDevice3GSiPhone: return YES;
case UIDevice4iPhone: return YES;
case UIDevice4SiPhone: return YES;
case UIDevice5iPhone: return YES;
case UIDevice3GiPod: return YES;
case UIDevice4GiPod: return YES;
case UIDevice1GiPad : return YES;
case UIDevice2GiPad : return YES;
case UIDevice3GiPad : return YES;
case UIDevice4GiPad : return YES;
default: return NO;
}
}
@end
@interface UIDevice (Info)
+ (NSString *) device; //设备类型(x86_64 iPod5,1)
+ (NSString *) deviceModel; //设备模式(iPad iPod iPhone)
+ (NSString *) osVersion; //系统版本
+ (NSString *) os; //平台
+ (NSString *) carrier; //运营商
+ (NSString *) resolution; //分辨率
+ (NSString *) locale; //地域
+ (NSString *) appVersion; //程序版本
+ (NSNumber *) timestamp; //unix timestamp
+ (NSString *) cpuType; //cpu型号
+ (NSString *) cpuFrequency; //cpu频率
+ (NSUInteger) cpuCount; //cpu核数
+ (NSArray *) cpuUsage; //cpu利用率
+ (NSUInteger) totalMemoryBytes; //获取手机内存总量,返回的是字节数
+ (NSUInteger) freeMemoryBytes; //获取手机可用内存,返回的是字节数
+ (long long) freeDiskSpaceBytes; //获取手机硬盘空闲空间,返回的是字节数
+ (long long) totalDiskSpaceBytes; //获取手机硬盘总空间,返回的是字节数
+ (BOOL ) isJailBreak; //是否越狱
+ (BOOL ) bluetoothCheck; //是否支持蓝牙
@end
import "UIDevice+Info.h"
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCarrier.h>
#import <mach/mach.h>
#import <mach/mach_host.h>
#import <sys/types.h>
#import <sys/param.h>
#import <sys/mount.h>
#import <mach/processor_info.h>
#include <sys/types.h>
#include <sys/sysctl.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/stat.h>
#include <net/if.h>
#include <net/if_dl.h>
#define IFPGA_NAMESTRING @"iFPGA"
#define IPHONE_1G_NAMESTRING @"iPhone 1G"
#define IPHONE_3G_NAMESTRING @"iPhone 3G"
#define IPHONE_3GS_NAMESTRING @"iPhone 3GS"
#define IPHONE_4_NAMESTRING @"iPhone 4"
#define IPHONE_4S_NAMESTRING @"iPhone 4S"
#define IPHONE_5_NAMESTRING @"iPhone 5"
#define IPHONE_UNKNOWN_NAMESTRING @"Unknown iPhone"
#define IPOD_1G_NAMESTRING @"iPod touch 1G"
#define IPOD_2G_NAMESTRING @"iPod touch 2G"
#define IPOD_3G_NAMESTRING @"iPod touch 3G"
#define IPOD_4G_NAMESTRING @"iPod touch 4G"
#define IPOD_UNKNOWN_NAMESTRING @"Unknown iPod"
#define IPAD_1G_NAMESTRING @"iPad 1G"
#define IPAD_2G_NAMESTRING @"iPad 2G"
#define IPAD_3G_NAMESTRING @"iPad 3G"
#define IPAD_4G_NAMESTRING @"iPad 4G"
#define IPAD_UNKNOWN_NAMESTRING @"Unknown iPad"
#define APPLETV_2G_NAMESTRING @"Apple TV 2G"
#define APPLETV_3G_NAMESTRING @"Apple TV 3G"
#define APPLETV_4G_NAMESTRING @"Apple TV 4G"
#define APPLETV_UNKNOWN_NAMESTRING @"Unknown Apple TV"
#define IOS_FAMILY_UNKNOWN_DEVICE @"Unknown iOS device"
#define SIMULATOR_NAMESTRING @"iPhone Simulator"
#define SIMULATOR_IPHONE_NAMESTRING @"iPhone Simulator"
#define SIMULATOR_IPAD_NAMESTRING @"iPad Simulator"
#define SIMULATOR_APPLETV_NAMESTRING @"Apple TV Simulator" //
//iPhone 3G 以后各代的CPU型号和频率
#define IPHONE_3G_CPUTYPE @"ARM11"
#define IPHONE_3G_CPUFREQUENCY @"412MHz"
#define IPHONE_3GS_CPUTYPE @"ARM Cortex A8"
#define IPHONE_3GS_CPUFREQUENCY @"600MHz"
#define IPHONE_4_CPUTYPE @"Apple A4"
#define IPHONE_4_CPUFREQUENCY @"1GMHz"
#define IPHONE_4S_CPUTYPE @"Apple A5 Double Core"
#define IPHONE_4S_CPUFREQUENCY @"800MHz"
//iPod touch 4G 的CPU型号和频率
#define IPOD_4G_CPUTYPE @"Apple A4"
#define IPOD_4G_CPUFREQUENCY @"800MHz"
#define IOS_CPUTYPE_UNKNOWN @"Unknown CPU type"
#define IOS_CPUFREQUENCY_UNKNOWN @"Unknown CPU frequency"
typedef enum {
UIDeviceUnknown,
UIDeviceSimulator,
UIDeviceSimulatoriPhone,
UIDeviceSimulatoriPad,
UIDeviceSimulatorAppleTV,
UIDevice1GiPhone,
UIDevice3GiPhone,
UIDevice3GSiPhone,
UIDevice4iPhone,
UIDevice4SiPhone,
UIDevice5iPhone,
UIDevice1GiPod,
UIDevice2GiPod,
UIDevice3GiPod,
UIDevice4GiPod,
UIDevice1GiPad,
UIDevice2GiPad,
UIDevice3GiPad,
UIDevice4GiPad,
UIDeviceAppleTV2,
UIDeviceAppleTV3,
UIDeviceAppleTV4,
UIDeviceUnknowniPhone,
UIDeviceUnknowniPod,
UIDeviceUnknowniPad,
UIDeviceUnknownAppleTV,
UIDeviceIFPGA,
} UIDevicePlatform;
typedef enum {
UIDeviceFamilyiPhone,
UIDeviceFamilyiPod,
UIDeviceFamilyiPad,
UIDeviceFamilyAppleTV,
UIDeviceFamilyUnknown,
} UIDeviceFamily;
@implementation UIDevice (Info)
+ (NSString *)device
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
charchar *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithUTF8String:machine];
free(machine);
return platform;
}
+ (NSString *) deviceModel
{
NSString *model = [[UIDevice currentDevice] model];
if ([model hasPrefix:@"iPad"]) {
return @"iPad";
} else if ([model hasPrefix:@"iPod"]) {
return @"iPod";
} else if ([model hasPrefix:@"iPhone"]){
return @"iPhone";
}
return nil;
}
+ (NSString *)osVersion
{
return [[UIDevice currentDevice] systemVersion];
}
+ (NSString*)os
{
return @"iOS";
}
+ (NSString *)carrier
{
if (NSClassFromString(@"CTTelephonyNetworkInfo"))
{
CTTelephonyNetworkInfo *netinfo = [[[CTTelephonyNetworkInfo alloc] init] autorelease];
CTCarrier *carrier = [netinfo subscriberCellularProvider];
return [carrier carrierName];
}
return @"";
}
+ (NSString *)resolution
{
CGRect bounds = [[UIScreen mainScreen] bounds];
CGFloat scale = [[UIScreen mainScreen] respondsToSelector:@selector(scale)] ? [[UIScreen mainScreen] scale] : 1.f;
CGSize res = CGSizeMake(bounds.size.width * scale, bounds.size.height * scale);
NSString *result = [NSString stringWithFormat:@"%gx%g", res.width, res.height];
return result;
}
+ (NSString *)locale
{
return [[NSLocale currentLocale] localeIdentifier];
}
+ (NSString *)appVersion
{
return [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
}
+ (NSNumber *)timestamp
{
return [NSNumber numberWithLong:time(NULL)];
}
#pragma mark sysctlbyname utils
+ (NSString *) getSysInfoByName:(charchar *)typeSpecifier
{
size_t size;
sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);
charchar *answer = malloc(size);
sysctlbyname(typeSpecifier, answer, &size, NULL, 0);
NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];
free(answer);
return results;
}
#pragma mark platform information
+ (NSString *) platform
{
return [self getSysInfoByName:"hw.machine"];
}
+ (NSUInteger) platformType
{
NSString *platform = [self platform];
// The ever mysterious iFPGA
if ([platform isEqualToString:@"iFPGA"]) return UIDeviceIFPGA;
// iPhone
if ([platform isEqualToString:@"iPhone1,1"]) return UIDevice1GiPhone;
if ([platform isEqualToString:@"iPhone1,2"]) return UIDevice3GiPhone;
if ([platform hasPrefix:@"iPhone2"]) return UIDevice3GSiPhone;
if ([platform hasPrefix:@"iPhone3"]) return UIDevice4iPhone;
if ([platform hasPrefix:@"iPhone4"]) return UIDevice4SiPhone;
if ([platform hasPrefix:@"iPhone5"]) return UIDevice5iPhone;
// iPod
if ([platform hasPrefix:@"iPod1"]) return UIDevice1GiPod;
if ([platform hasPrefix:@"iPod2"]) return UIDevice2GiPod;
if ([platform hasPrefix:@"iPod3"]) return UIDevice3GiPod;
if ([platform hasPrefix:@"iPod4"]) return UIDevice4GiPod;
// iPad
if ([platform hasPrefix:@"iPad1"]) return UIDevice1GiPad;
if ([platform hasPrefix:@"iPad2"]) return UIDevice2GiPad;
if ([platform hasPrefix:@"iPad3"]) return UIDevice3GiPad;
if ([platform hasPrefix:@"iPad4"]) return UIDevice4GiPad;
// Apple TV
if ([platform hasPrefix:@"AppleTV2"]) return UIDeviceAppleTV2;
if ([platform hasPrefix:@"AppleTV3"]) return UIDeviceAppleTV3;
if ([platform hasPrefix:@"iPhone"]) return UIDeviceUnknowniPhone;
if ([platform hasPrefix:@"iPod"]) return UIDeviceUnknowniPod;
if ([platform hasPrefix:@"iPad"]) return UIDeviceUnknowniPad;
if ([platform hasPrefix:@"AppleTV"]) return UIDeviceUnknownAppleTV;
// Simulator thanks Jordan Breeding
if ([platform hasSuffix:@"86"] || [platform isEqual:@"x86_64"])
{
BOOL smallerScreen = [[UIScreen mainScreen] bounds].size.width < 768;
return smallerScreen ? UIDeviceSimulatoriPhone : UIDeviceSimulatoriPad;
}
return UIDeviceUnknown;
}
+ (NSString *) platformString
{
switch ([self platformType])
{
case UIDevice1GiPhone: return IPHONE_1G_NAMESTRING;
case UIDevice3GiPhone: return IPHONE_3G_NAMESTRING;
case UIDevice3GSiPhone: return IPHONE_3GS_NAMESTRING;
case UIDevice4iPhone: return IPHONE_4_NAMESTRING;
case UIDevice4SiPhone: return IPHONE_4S_NAMESTRING;
case UIDevice5iPhone: return IPHONE_5_NAMESTRING;
case UIDeviceUnknowniPhone: return IPHONE_UNKNOWN_NAMESTRING;
case UIDevice1GiPod: return IPOD_1G_NAMESTRING;
case UIDevice2GiPod: return IPOD_2G_NAMESTRING;
case UIDevice3GiPod: return IPOD_3G_NAMESTRING;
case UIDevice4GiPod: return IPOD_4G_NAMESTRING;
case UIDeviceUnknowniPod: return IPOD_UNKNOWN_NAMESTRING;
case UIDevice1GiPad : return IPAD_1G_NAMESTRING;
case UIDevice2GiPad : return IPAD_2G_NAMESTRING;
case UIDevice3GiPad : return IPAD_3G_NAMESTRING;
case UIDevice4GiPad : return IPAD_4G_NAMESTRING;
case UIDeviceUnknowniPad : return IPAD_UNKNOWN_NAMESTRING;
case UIDeviceAppleTV2 : return APPLETV_2G_NAMESTRING;
case UIDeviceAppleTV3 : return APPLETV_3G_NAMESTRING;
case UIDeviceAppleTV4 : return APPLETV_4G_NAMESTRING;
case UIDeviceUnknownAppleTV: return APPLETV_UNKNOWN_NAMESTRING;
case UIDeviceSimulator: return SIMULATOR_NAMESTRING;
case UIDeviceSimulatoriPhone: return SIMULATOR_IPHONE_NAMESTRING;
case UIDeviceSimulatoriPad: return SIMULATOR_IPAD_NAMESTRING;
case UIDeviceSimulatorAppleTV: return SIMULATOR_APPLETV_NAMESTRING;
case UIDeviceIFPGA: return IFPGA_NAMESTRING;
default: return IOS_FAMILY_UNKNOWN_DEVICE;
}
}
#pragma mark sysctl utils
+ (NSUInteger) getSysInfo: (uint) typeSpecifier
{
size_t size = sizeof(int);
int results;
int mib[2] = {CTL_HW, typeSpecifier};
sysctl(mib, 2, &results, &size, NULL, 0);
return (NSUInteger) results;
}
#pragma mark cpu information
+ (NSString *) cpuType
{
switch ([self platformType])
{
case UIDevice3GiPhone: return IPHONE_3G_CPUTYPE;
case UIDevice3GSiPhone: return IPHONE_3GS_CPUTYPE;
case UIDevice4iPhone: return IPHONE_4_CPUTYPE;
case UIDevice4SiPhone: return IPHONE_4S_CPUTYPE;
case UIDevice4GiPod: return IPOD_4G_CPUTYPE;
default: return IOS_CPUTYPE_UNKNOWN;
}
}
+ (NSString *) cpuFrequency
{
switch ([self platformType])
{
case UIDevice3GiPhone: return IPHONE_3G_CPUFREQUENCY;
case UIDevice3GSiPhone: return IPHONE_3GS_CPUFREQUENCY;
case UIDevice4iPhone: return IPHONE_4_CPUFREQUENCY;
case UIDevice4SiPhone: return IPHONE_4S_CPUFREQUENCY;
case UIDevice4GiPod: return IPOD_4G_CPUFREQUENCY;
default: return IOS_CPUFREQUENCY_UNKNOWN;
}
}
+ (NSUInteger) cpuCount
{
return [self getSysInfo:HW_NCPU];
}
+ (NSArray *)cpuUsage
{
NSMutableArray *usage = [NSMutableArray array];
// float usage = 0;
processor_info_array_t _cpuInfo, _prevCPUInfo = nil;
mach_msg_type_number_t _numCPUInfo, _numPrevCPUInfo = 0;
unsigned _numCPUs;
NSLock *_cpuUsageLock;
int _mib[2U] = { CTL_HW, HW_NCPU };
size_t _sizeOfNumCPUs = sizeof(_numCPUs);
int _status = sysctl(_mib, 2U, &_numCPUs, &_sizeOfNumCPUs, NULL, 0U);
if(_status)
_numCPUs = 1;
_cpuUsageLock = [[NSLock alloc] init];
natural_t _numCPUsU = 0U;
kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &_numCPUsU, &_cpuInfo, &_numCPUInfo);
if(err == KERN_SUCCESS) {
[_cpuUsageLock lock];
for(unsigned i = 0U; i < _numCPUs; ++i) {
Float32 _inUse, _total;
if(_prevCPUInfo) {
_inUse = (
(_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER])
+ (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM])
+ (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE])
);
_total = _inUse + (_cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - _prevCPUInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]);
} else {
_inUse = _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];
_total = _inUse + _cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];
}
// NSLog(@"Core : %u, Usage: %.2f%%", i, _inUse / _total * 100.f);
float u = _inUse / _total * 100.f;
[usage addObject:[NSNumber numberWithFloat:u]];
}
[_cpuUsageLock unlock];
if(_prevCPUInfo) {
size_t prevCpuInfoSize = sizeof(integer_t) * _numPrevCPUInfo;
vm_deallocate(mach_task_self(), (vm_address_t)_prevCPUInfo, prevCpuInfoSize);
}
_prevCPUInfo = _cpuInfo;
_numPrevCPUInfo = _numCPUInfo;
_cpuInfo = nil;
_numCPUInfo = 0U;
} else {
NSLog(@"Error!");
}
return usage;
}
#pragma mark memory information
+ (NSUInteger) totalMemoryBytes
{
return [self getSysInfo:HW_PHYSMEM];
}
+ (NSUInteger) freeMemoryBytes
{
mach_port_t host_port = mach_host_self();
mach_msg_type_number_t host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
vm_size_t pagesize;
vm_statistics_data_t vm_stat;
host_page_size(host_port, &pagesize);
if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) NSLog(@"Failed to fetch vm statistics");
// natural_t mem_used = (vm_stat.active_count + vm_stat.inactive_count + vm_stat.wire_count) * pagesize;
natural_t mem_free = vm_stat.free_count * pagesize;
// natural_t mem_total = mem_used + mem_free;
return mem_free;
}
#pragma mark disk information
+ (long long) freeDiskSpaceBytes
{
struct statfs buf;
long long freespace;
freespace = 0;
if(statfs("/private/var", &buf) >= 0){
freespace = (long long)buf.f_bsize * buf.f_bfree;
}
return freespace;
}
+ (long long) totalDiskSpaceBytes
{
struct statfs buf;
long long totalspace;
totalspace = 0;
if(statfs("/private/var", &buf) >= 0){
totalspace = (long long)buf.f_bsize * buf.f_blocks;
}
return totalspace;
}
+ (BOOL) isJailBreak
{
// int res = access("/var/mobile/Library/AddressBook/AddressBook.sqlitedb", F_OK);
// if (res != 0)
// return NO;
// return YES;
BOOL jailbroken = NO;
NSString *cydiaPath = @"/Applications/Cydia.app";
NSString *aptPath = @"/private/var/lib/apt/";
if ([[NSFileManager defaultManager] fileExistsAtPath:cydiaPath]) {
jailbroken = YES;
}
if ([[NSFileManager defaultManager] fileExistsAtPath:aptPath]) {
jailbroken = YES;
}
return jailbroken;
}
#pragma mark bluetooth information
+ (BOOL) bluetoothCheck
{
switch ([self platformType])
{
case UIDevice3GiPhone: return YES;
case UIDevice3GSiPhone: return YES;
case UIDevice4iPhone: return YES;
case UIDevice4SiPhone: return YES;
case UIDevice5iPhone: return YES;
case UIDevice3GiPod: return YES;
case UIDevice4GiPod: return YES;
case UIDevice1GiPad : return YES;
case UIDevice2GiPad : return YES;
case UIDevice3GiPad : return YES;
case UIDevice4GiPad : return YES;
default: return NO;
}
}
@end
相关推荐
总的来说,获取iOS设备信息需要遵循Apple的开发指南和隐私政策,部分敏感信息可能受到限制。在实际开发中,应确保遵守规定,避免使用未经许可的私有API,以保证应用能够在App Store顺利上线并为用户提供安全、合规的...
总的来说,获取iOS设备信息时,开发者应遵循Apple的隐私指导原则,避免直接获取敏感数据,如MAC地址,而是利用官方提供的API获取如UUID这样的设备标识。同时,了解和使用其他设备信息可以帮助优化应用的适配性和用户...
2. **iOS设备信息**:包括但不限于设备型号、系统版本、内存信息、电池状态、网络连接状况等,这些信息对于诊断和解决兼容性问题至关重要。 3. **屏幕快照**:屏幕截图功能使得开发者可以直观地看到应用界面的显示...
在Swift开发过程中,有时我们需要获取连接到电脑的iOS设备的相关信息,这可能涉及到调试、自动化测试或者设备管理等场景。为了实现这一功能,我们可以利用Python编写一个轻量级的库,借助Apple提供的开发者工具和...
由于提供的【部分内容】中包含重复的文本和OCR扫描错误,我将尝试从中提炼出有价值的iOS设备信息获取的知识点,同时修正扫描错误,并尽量让内容通顺。 iOS设备信息获取是移动应用开发中一个重要的方面,尤其是在...
本资源“ios-获取iOS设备名称及生成设备唯一标识符.zip”提供了相关的代码库Devicelib,帮助开发者实现这些功能。 首先,我们来看如何获取iOS设备的名称。在iOS中,可以使用`UIDevice`类来获取设备的信息,包括设备...
根据提供的标题、描述以及部分文本内容,我们可以整理出关于iOS设备信息获取的相关知识点。这篇文章主要聚焦于iOS设备信息的获取方法,并特别强调了对iPhone XS Max和iPhone XR这两种型号的信息更新。 ### 一、获取...
在iOS开发中,获取设备信息是一项基础且重要的任务,它可以帮助开发者更好地理解用户环境,进行个性化设置或提供更精准的服务。以下将详细讲解如何在iOS中获取这些信息,以及涉及的相关知识点。 首先,我们来看标题...
"获取ios设备号"这个主题涉及到的主要知识点包括UDID(Unique Device Identifier)、UUID(Universally Unique Identifier)、广告标识符(IDFA,Identifier for Advertising)以及SSKeychain库的使用。 1. UDID...
`UIDevice`是iOS中用于获取设备信息的核心类。通过实例化这个类,我们可以获取到当前设备的各种属性。例如,`[UIDevice currentDevice]`将返回一个表示当前设备的`UIDevice`对象。 2. **获取设备名称**: 要获取...
它在许多场景下都非常有用,例如记录用户设备信息、个性化设置同步等。在iOS系统中,UUID的概念经历了几次变化,因此了解如何正确获取并使用它是至关重要的。 在iOS 6及更早版本中,苹果提供了`UIDevice`类的`...
- 系统信息获取:可以获取设备的基本信息,如版本、序列号、电池状态等。 2. **C#与VB.NET支持**: - 通过.NET接口,iMobileDevice-net使得C#和VB.NET开发者可以方便地调用各种设备交互函数,降低了学习曲线。 -...
总结来说,获取iOS设备的唯一标识涉及到对`UDID`、`CFUUID`、`identifierForVendor`以及`IDFA`等概念的理解。开发者应根据具体需求选择合适的标识符,并且始终尊重用户的隐私,遵守Apple的开发者指南。随着iOS系统的...
IOS设备类型获取PLIST struct utsname systemInfo; uname(&systemInfo); NSString *iOSDeviceModelsPath = [[NSBundle mainBundle] pathForResource:@"iOSDeviceModelMapping" ofType:@"plist"]; NSDictionary *...
在iOS设备上,MAC地址主要用于Wi-Fi和蓝牙通信。然而,由于隐私考虑,自iOS 7以后,Apple不再允许直接获取硬件的MAC地址,而是提供了一个随机生成的“私有MAC地址”或者称为“设备唯一标识符(IDFV)”。 尽管如此...
本文还提供了一些常用的 Capability 配置获取方法,如使用 `adb` 命令获取 Android 设备信息,使用 `ideviceinfo` 命令获取 iOS 设备信息等等。这些方法可以帮助开发者快速地获取 Capability 配置,从而提高 Appium ...
总之,利用Objective-C,我们可以方便地获取iOS设备的各种系统信息。但要注意,随着iOS系统的更新,某些API可能会发生变化,因此在开发过程中应时刻关注Apple的官方文档和最新开发者资讯,确保代码的兼容性和合规性...
总结来说,要精确获取iOS设备的电量,需要对`UIDevice`的电池状态API有深入理解,并结合事件监听、采样分析等手段优化。同时,根据项目需求,还可以考虑利用第三方库或服务来提升精度。在实际开发中,应不断测试和...
- `GetiOSDeviceIdentifier`: 用于获取iOS设备的唯一标识,可能包括IDFA、UUID等。 - `GetAndroidDeviceIdentifier`: 用于获取Android设备的唯一标识,可能使用ANDROID_ID或其他方式。 - `...
总的来说,获取iOS设备的WiFi信息涉及到对CoreTelephony框架的理解以及对网络可达性监测的掌握。尽管苹果的限制使得直接获取SSID变得困难,但开发者可以通过其他手段检测设备是否连接到WiFi网络。在实际应用中,应...