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
时间: 2024-08-12 16:36:17

libMobileGestalt与UDID的相关文章

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

在iOS7之前, 可以方便的使用 [[UIDevice currentDevice] uniqueIdentifier] 来获取设备的UDID,但是在iOS7之后这个方法不再适用. 你可以用[[UIDevicecurrentDevice]valueForKey:@"uniqueIdentifier"];来获取到一个值,但这个值在iOS7中已经变成了FFFFFF+IDFV的值,显然,这个值并不能唯一标识设备. 再谈一谈IMEI,这个值好像在5.0的sdk中就不见了,私有库Message.

iOS----------关于UDID和UUID的一些理解

一.UDID(Unique Device Identifier)  UDID是Unique Device Identifier的缩写,中文意思是设备唯一标识. 在很多需要限制一台设备一个账号的应用中经常会用到,在Symbian时代,我们是使用IMEI作为设备的唯一标识的,可惜的是Apple官方不允许开发者获得设备的IMEI. ios5 sdk中的获取方法: [UIDevice currentDevice] uniqueIdentifier] uniqueIdentifier在UIDevice.h

iOS平台UDID方案比较

苹果在iOS6中禁用了[UIDevice uniqueIdentifier],在iOS7中又把mac地址的获取给堵上了.没办法,毕竟人家是老大,说不让你用,你也没办法.在这边总结一下现有的一部分UDID获取方法(有苹果推荐的,也有第三方的),目的在于抛砖,没有切实的说明哪种方法好用.用哪种方法,完全由大家自己根据需要来决定. iOS2~iOS7目前已有的技术方案 系统支持情况苹果在iOS6以后,已禁用了UIDevice的uniqueIdentifier方法,所以传统的UDID方法在iOS6以后已

苹果设备UDID查看方法

三种查看iPhone和iPad的UDID的简单方法 在开发iPhone和iPad软件的时候,要使用UDID来做真机测试,那么如何查看iPhone或者iPad的UDID呢?下面icech介绍三种最简单的查看UDID的方法,供大家参考!icech使用的是iPod Touch抓屏,不过方法都是一样的. 1.使用iTunes软件查看UDID 这个办法适用于普通的iPhone用户.打开iTunes软件(俺使用的是iTunes 10.3版本,下载地址为:http://www.weste.net/2011/6

iOS开发中的UDID和UUID详解

今天突然想和大家聊聊UDID和UUID的问题,虽然平时我们对这两个东西很忽视,往往也很难区分这两个东西.今天就来好好谈谈. [UDID] UDID的全名为 Unique Device Identifier :设备唯一标识符.从名称上也可以看出,UDID这个东西是和设备有关的,而且是只和设备有关的,有点类似于MAC地址.我在上一篇博客中<iOS应用发布流程详解>提到了真机调试,然后需要把UDID这个东西添加到Provisoning Profile授权文件中,也就是把设备唯一标识符添加进去,以此来

UUID UDID

Google搜索关键字Difference between UUID and UDID,在stackoverflow看见解释,我翻译过来,如下所述. UUID(Universally Unique IDentifier)是基于iOS设备上面某个单个的应用程序,只要用户没有完全删除应用程序,则这个UUID在用户使用该应用程序的时候一直保持不变.如果用户删除了这个应用程序,然后再重新安装,那么这个UUID已经发生了改变.通过调用[[UIDevice currentDevice] identifier

(转)iOS平台UDID方案比较

苹果在iOS6中禁用了[UIDevice uniqueIdentifier],在iOS7中又把mac地址的获取给堵上了.没办法,毕竟人家是老大,说不让你用,你也没办法. 在这边总结一下现有的一部分UDID获取方法(有苹果推荐的,也有第三方的),目的在于抛砖,没有切实的说明哪种方法好用.用哪种方法,完全由大家自己根据需要来决定.(点击查看大图) 系统支持情况 苹果在iOS6以后,已禁用了UIDevice的uniqueIdentifier方法,所以传统的UDID方法在iOS6以后已不能使用:而从iO

从xcode 导出证书 ,查看在xcode上调试过手机的序列号以及udid

一.从xcode导出证书 xcode->preferences->accounts->选中apple ids->点击底下设置按钮会弹出一个import accounts 和export accounts,选择exports accounts->输入两次下次使用的密码 二.查看在xcode上调试过的,手机的序列号以及udid window->organizer->devices(左侧可以查看和选择设备)

获取 苹果UDID 序列号

UDID是什么? UDID 是由子母和数字组成的40个字符串的序号,用来区别每一个唯一的iOS设备,包括 iPhones, iPads, 以及 iPod touches,这些编码看起来是随机的,实际上是跟硬件设备特点相联系的,另外你可以到iTunes点击查询序列号,如下如所示: 还需要在点击一下序列号才能出来 获取 苹果UDID 序列号,布布扣,bubuko.com