如何在iPhone 5上获取IMEI

时间:2013-05-21 10:39:44

标签: ios objective-c ios6 jailbreak imei

我正在为越狱的iOS设备开发应用程序。我使用https://github.com/erica/uidevice-extension/blob/master/UIDevice-IOKitExtensions.m获取IMEI,但在iPhone 5上,此解决方案不起作用(返回空字符串)。有没有办法在iPhone 5(iOS 6.1.2)上获取IMEI?

3 个答案:

答案 0 :(得分:6)

有几种方法可以在较新的设备上获取IMEI

1)Private ManagedConfiguration.framework

CFStringRef MCCTIMEI()

2)CoreTelephony.framework

struct CTResult
{
    int flag;
    int a;
};
extern CFStringRef kCTMobileEquipmentInfoIMEI;

void *connection = _CTServerConnectionCreate(kCFAllocatorDefault, NULL, NULL);

NSDictionary *info = nil;
struct CTResult result;
_CTServerConnectionCopyMobileEquipmentInfo(&result, connection, &info);
[info autorelease];    
CFRelease(connection);

NSString* IMEI = (NSString*)info[(NSString*)kCTMobileEquipmentInfoIMEI];

3)liblockdown.dylib

extern CFStringRef kLockdownIMEIKey;

void* connection = lockdown_connect();
NSString* IMEI = [(NSString*)lockdown_copy_value(connection, NULL, kLockdownIMEIKey) autorelease];
lockdown_disconnect(connection);

我遇到MCCTIMEI的问题 - 设备启动后返回空的IMEI。现在我正在使用CoreTelephony解决方案,从未遇到过问题。

<强>更新

在iOS 7上,这些API受com.apple.coretelephony.Identity.get权利保护。要访问IMEI(IMSI,电话号码和其他信息),您需要使用布尔值设置为true的权利签名。

答案 1 :(得分:2)

以编程方式获取IMEI号有些困难。但是,如果您正在寻找识别特定手机的方法,则可以使用UDID(唯一设备标识符)来执行此操作。

NSString *UDID = [[UIDevice currentDevice] uniqueIdentifier];

并尝试使用IMEI

NSString *imei = [[NetworkController sharedInstance] IMEI];

****** 2014年10月更新******

NSUUID *UUID = [[UIDevice currentDevice] identifierForVendor];
NSString *stringUUID = [UUID UUIDString];

UUID是手机硬件的基本唯一标识符。由于制造商之间没有合作,因此无法保证其独特性,但考虑到组合的数量,它是适用于各种应用的合理可靠的硬件标识符。

答案 2 :(得分:1)

您可以使用它:


GitHub

下载以下两个文件
OpenUDID.h
OpenUDID.m

将这些文件添加到您的项目中。

并将其用作

#import "OpenUDID.h"

NSString* openUDID = [OpenUDID value];

在iPhone 4和iPhone 5中测试