获取设备UDID、IMEI、ICCID、序列号、Mac地址等信息

在iOS7以前, 能够方便的使用 [[UIDevice currentDevice] uniqueIdentifier] 来获取设备的UDID,可是在iOS7以后这个方法再也不适用。html

 

你能够用[[UIDevicecurrentDevice]valueForKey:@"uniqueIdentifier"];来获取到一个值,但这个值在iOS7中已经变成了FFFFFF+IDFV的值,显然,这个值并不能惟一标识设备。git

 

再谈一谈IMEI,这个值好像在5.0的sdk中就不见了,私有库Message.framework的MFNetworkController.h中去掉了这个方法。web

 

本觉得iOS7及以上系统没法再获取到这些值,但看看别人Cydia,不是取得好好的吗?参考了一下Cydia的源码:测试

MobileCydia.mmui

能够看到它使用了libMobileGestalt.dylib这个动态库,下面说一说具体如何操做。.net

 

一、导入libMobileGestalt.dylib库3d

二、加入声明code

 

[objc]  view plain copy print ?
 
  1. OBJC_EXTERNCFStringRef MGCopyAnswer(CFStringRef key) WEAK_IMPORT_ATTRIBUTE;  

 

 

三、使用以下方法获取htm

[objc]  view plain copy print ?
 
  1. CFStringRef UDID = MGCopyAnswer(CFSTR("UniqueDeviceID"));  
  2. CFStringRef IMEI =MGCopyAnswer(CFSTR("InternationalMobileEquipmentIdentity"));  
  3. CFStringRefserialNumber = MGCopyAnswer(CFSTR("SerialNumber"));  
[objc]  view plain copy print ?
 
  1. CFArrayRef ICCIDArray =MGCopyAnswer(CFSTR("CarrierBundleInfoArray"));  
  2. CFDictionaryRef ICCIDDic =CFArrayGetValueAtIndex(ICCIDArray, 0);  
  3. CFStringRef ICCID  =CFDictionaryGetValue(ICCIDDic, CFSTR("IntegratedCircuitCardIdentity"));  
[objc]  view plain copy print ?
 
  1. CFStringRefwifiAddress = MGCopyAnswer(CFSTR("WifiAddress"));  
  2. CFStringRefbluetoothAddress = MGCopyAnswer(CFSTR("BluetoothAddress"));  
  3. CFStringRefCPUArchitecture = MGCopyAnswer(CFSTR("CPUArchitecture"));  
  4. CFStringRefproductType = MGCopyAnswer(CFSTR("ProductType"));  
  5. CFTypeRefairplaneMode = MGCopyAnswer(CFSTR("AirplaneMode"));  
  6. if (airplaneMode ==kCFBooleanTrue) { ... }  

 

四、通过测试发现这些方法在iOS7如下不用越狱就能取到、在iOS7中须要越狱并建立xxx.entitlements文件,添加以下权限ip

五、在BuildSettings的Code SigningEntitlements中添加刚才建立的文件xxx.entitlements

 

六、编译运行

 

七、附上demo工程

http://download.csdn.net/detail/ookcode/8247495

 

八、个人环境

Xcode 6.1

iOS 8.1 SDK

OS X 10.9.5

相关文章
相关标签/搜索