ios - 如何在 iPhone 5 上获取 IMEI

标签 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?

最佳答案

有几种方法可以在较新的设备上获取 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、电话号码和其他信息),您需要使用 bool 值设置为 true 的权利进行签名。

关于ios - 如何在 iPhone 5 上获取 IMEI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16667988/

相关文章:

iOS - 在非主线程上以串行方式运行异步操作

iOS 设备 UDID

objective-c - 如何通过 Objective-C 获取 iTunes 轨道的当前时间?

objective-c - 将 NSArray 从 Swift 传递到 Objective-C 函数

ios - 如何在 SQLite 中限制表中的整数位

ios - 检测 ARKit 中 SCNNode 不同位置的触摸

ios - 应用程序未通过代码设计验证 (-19011)

iphone - Objective-C - 如何保存和加载包含图像的数组

iphone - 如何从ios应用程序连接到本地WIFI并传输信息/照片

ios - 访问页面 View Controller 上的属性