在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_EXTERNCFStringRef MGCopyAnswer(CFStringRef key) WEAK_IMPORT_ATTRIBUTE;
三、使用以下方法获取htm
- CFStringRef UDID = MGCopyAnswer(CFSTR("UniqueDeviceID"));
- CFStringRef IMEI =MGCopyAnswer(CFSTR("InternationalMobileEquipmentIdentity"));
- CFStringRefserialNumber = MGCopyAnswer(CFSTR("SerialNumber"));
- CFArrayRef ICCIDArray =MGCopyAnswer(CFSTR("CarrierBundleInfoArray"));
- CFDictionaryRef ICCIDDic =CFArrayGetValueAtIndex(ICCIDArray, 0);
- CFStringRef ICCID =CFDictionaryGetValue(ICCIDDic, CFSTR("IntegratedCircuitCardIdentity"));
- CFStringRefwifiAddress = MGCopyAnswer(CFSTR("WifiAddress"));
- CFStringRefbluetoothAddress = MGCopyAnswer(CFSTR("BluetoothAddress"));
- CFStringRefCPUArchitecture = MGCopyAnswer(CFSTR("CPUArchitecture"));
- CFStringRefproductType = MGCopyAnswer(CFSTR("ProductType"));
- CFTypeRefairplaneMode = MGCopyAnswer(CFSTR("AirplaneMode"));
- 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