libMobileGestalt与UDID
libMobileGestalt与UDID
在iOS中,libMobileGestalt动态库, 用来取得各种系统变量,比如UDID, 磁盘使用量, 设备版本
在iOS7中,对于开发者来说,一个头痛的问题是:UIDI完全是失效了
从iOS5开始,Apple就禁止程序获得设备的UDID
在iOS6中, 可以用 [[UIDevice currentDevice] uniqueIdentifier] 来获取
在Cydia中,可以获取
http://gitweb.saurik.com/cydia.git/blob/90bf9a3d170ab2dc4701c76f7b3911308211f542:/MobileCydia.mm
static CFStringRef (*$MGCopyAnswer)(CFStringRef);
void *gestalt(dlopen(“/usr/lib/libMobileGestalt.dylib”, RTLDGLOBAL | RTLDLAZY));
$MGCopyAnswer = reinterpret_cast(dlsym(gestalt, “MGCopyAnswer”));
(id)$MGCopyAnswer(CFSTR(“UniqueDeviceID”));
http://hiraku.tw/2013/12/3316/
#import "UIDevice+MobileGestaltCategroy.h" @implementation UIDevice (MobileGestalt) // Mobile Gestalt EquipmentInfo
extern CFTypeRef MGCopyAnswer(CFStringRef); - (NSString *)UDID {
NSString *retVal = nil;
CFTypeRef tmp = MGCopyAnswer(CFSTR("UniqueDeviceID"));
if (tmp) {
retVal = [NSString stringWithString:tmp];
CFRelease(tmp);
}
return retVal;
} - (NSString *)IMEI {
NSString *retVal = nil;
CFTypeRef tmp = MGCopyAnswer(CFSTR("InternationalMobileEquipmentIdentity"));
if (tmp) {
retVal = [NSString stringWithString:tmp];
CFRelease(tmp);
}
return retVal;
} - (NSString *)ICCID {
NSString *retVal = nil;
CFArrayRef infoArray = MGCopyAnswer(CFSTR("CarrierBundleInfoArray"));
if (infoArray) {
CFDictionaryRef infoDic = CFArrayGetValueAtIndex(infoArray, 0);
if (infoDic) {
retVal = [NSString stringWithString:CFDictionaryGetValue(infoDic, CFSTR("IntegratedCircuitCardIdentity"))];
}
CFRelease(infoArray);
}
return retVal;
} - (NSString *)serialNumber {
NSString *retVal = nil;
CFTypeRef tmp = MGCopyAnswer(CFSTR("SerialNumber"));
if (tmp) {
retVal = [NSString stringWithString:tmp];
CFRelease(tmp);
}
return retVal;
} - (NSString *)wifiAddress {
NSString *retVal = nil;
CFTypeRef tmp = MGCopyAnswer(CFSTR("WifiAddress"));
if (tmp) {
retVal = [NSString stringWithString:tmp];
CFRelease(tmp);
}
return retVal;
} - (NSString *)bluetoothAddress {
NSString *retVal = nil;
CFTypeRef tmp = MGCopyAnswer(CFSTR("BluetoothAddress"));
if (tmp) {
retVal = [NSString stringWithString:tmp];
CFRelease(tmp);
}
return retVal;
} - (NSString *)cpuArchitecture {
NSString *retVal = nil;
CFTypeRef tmp = MGCopyAnswer(CFSTR("CPUArchitecture"));
if (tmp) {
retVal = [NSString stringWithString:tmp];
CFRelease(tmp);
}
return retVal;
} - (NSString *)productType {
NSString *retVal = nil;
CFTypeRef tmp = MGCopyAnswer(CFSTR("ProductType"));
if (tmp) {
retVal = [NSString stringWithString:tmp];
CFRelease(tmp);
}
return retVal;
} - (BOOL)airplaneMode {
BOOL retVal = NO;
CFTypeRef tmp = MGCopyAnswer(CFSTR("AirplaneMode"));
if (tmp) {
if (tmp == kCFBooleanTrue) {
retVal = YES;
}
CFRelease(tmp);
}
return retVal;
} @end
libMobileGestalt与UDID的更多相关文章
- 获取设备UDID、IMEI、ICCID、序列号、Mac地址等信息
在iOS7之前, 可以方便的使用 [[UIDevice currentDevice] uniqueIdentifier] 来获取设备的UDID,但是在iOS7之后这个方法不再适用. 你可以用[[UID ...
- 通过安装一个描述文件在控制台获得设备的udid
在我的这篇博客里面说明了本地获得设备udid的方法,但是只能在模拟器中获得http://www.cnblogs.com/liyy2015/p/6090204.html 当然可以在设备上集成苹果的MDM ...
- 获得设备的唯一标识符UDID
在IOS5之后,苹果为避免根据UDID获得用户的信息,而禁止使用uniqueIdentifier获得UDID,但是仍有些应用需要根据UDID区分设备 有一个系统的库IOKit.framework可以获 ...
- iOS平台UDID方案比较
苹果在iOS6中禁用了[UIDevice uniqueIdentifier],在iOS7中又把mac地址的获取给堵上了.没办法,毕竟人家是老大,说不让你用,你也没办法.在这边总结一下现有的一部分UDI ...
- 获取iPhone手机的UDID和设备名称.
关于设备名称: iPhone的设备名称也可以在手机上面查看到:设置-通用-关于本机-名称(设备名称是可以自己改的) 关于UUID: 什么?用了iPhone这么久你不知道什么叫UDID! UDID 是由 ...
- 如何获取苹果手机的UDID
获取苹果手机的UDID有很多种,比如Xcode,iTunes等等吧,个人比较推荐使用iTunes,因为比较官方,而且苹果电脑自带的有,而且Windows也可以下载安装. 1.下载安装itunes(点击 ...
- UUID UDID
Google搜索关键字Difference between UUID and UDID,在stackoverflow看见解释,我翻译过来,如下所述. UUID(Universally Unique I ...
- 如何查看设备的 UDID
手机连接上电脑,打开 Xcode,确认手机已连上: command+shift+2,就可以查看到 UDID 了:
- 获取 苹果UDID 序列号
UDID是什么? UDID 是由子母和数字组成的40个字符串的序号,用来区别每一个唯一的iOS设备,包括 iPhones, iPads, 以及 iPod touches,这些编码看起来是随机的,实际上 ...
随机推荐
- Openjudge-计算概论(A)-比饭量
描述: 3个人比饭量,每人说了两句话: A说:B比我吃的多,C和我吃的一样多 B说:A比我吃的多,A也比C吃的多 C说:我比B吃得多,B比A吃的多. 事实上,饭量和正确断言的个数是反序的关系. 请编程 ...
- Block使用中的一些要注意的地方
本文主要是阐述一下Block中如何的使用外部变量以及block本身的内存管理. 先定义一个block变量,作为后续的例子中使用: typedef void(^BlockCC)(void); Block ...
- 实验六 多线程编程 1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
//继承Thread类 package zuoye; //继承Thread类 public class City extends Thread{ private String name; public ...
- elipse图标注解
Java中的访问修饰符(访问控制符)包括:public,protected,default,private.分别代表了不同的访问权限.如果省略,则被视为使用了默认的default作为访问修饰符.从字面 ...
- web跨域问题
环境: win7_x64旗舰版.Google Chrome-v44.0.2403.155.node-v0.10.29.express-v3.2.5.jQuery-v1.8.3 一.跨域GET: 客户端 ...
- 《Windows驱动开发技术详解》之派遣函数
驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式下所有对驱动程序的I/O请求,全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同 ...
- Centos6.4 NFS的安装与配置
NFS,是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件.通过使用N ...
- hdu_5734_Acperience
题目连接:hdu_5734_Acperience 多校的题我还是贴官方题解的好,方便快捷,省事!! #include<cstdio> #include<cmath> #defi ...
- HDU1379:DNA Sorting
Problem Description One measure of ``unsortedness'' in a sequence is the number of pairs of entries ...
- updating the chroot
Ubuntu may stop working after a Chrome OS update. If that's the case, update all the installed targe ...