我正在尝试获取代码正在运行的 ipad 的 IMEI,但我不想将它链接到那里的应用程序,因为我想动态加载 IOKit。
我在周围找到了一些代码并将其转换为此代码,并在 iPhone 4s 上对其进行了测试,但它确实有效,任何人都可以看到此代码不起作用的任何原因吗?
PS我的应用程序不能通过应用程序商店仅作为企业应用程序提供。
mach_port_t masterPort;
CFTypeID propID = (CFTypeID) NULL;
unsigned int bufSize;
void *IOKit = dlopen("/System/Library/Frameworks/IOKit.framework/IOKit", RTLD_NOW);
if(IOKit)
{
kern_return_t (*kIOMasterPort)( mach_port_t bootstrapPort,mach_port_t * masterPort ) = dlsym(IOKit,"IOMasterPort");
io_registry_entry_t (*kIORegistryGetRootEntry)(mach_port_t masterPort ) = dlsym(IOKit,"IORegistryGetRootEntry");
CFTypeRef (*kIORegistryEntrySearchCFProperty)(io_registry_entry_t entry,const io_name_t plane,CFStringRef key,CFAllocatorRef allocator, IOOptionBits options ) =
dlsym(IOKit,"IORegistryEntrySearchCFProperty");
kern_return_t kr = kIOMasterPort(MACH_PORT_NULL, &masterPort);
io_registry_entry_t entry = kIORegistryGetRootEntry(masterPort);
CFTypeRef prop = kIORegistryEntrySearchCFProperty(entry, "IODeviceTree", (CFStringRef) @"device-imei" , nil, kIORegistryIterateRecursively);
propID = CFGetTypeID(prop);
CFDataRef propData = (CFDataRef) prop;
if (!propData) return nil;
bufSize = CFDataGetLength(propData);
if (!bufSize) return nil;
NSString *p1 = [[[NSString alloc] initWithBytes:CFDataGetBytePtr(propData) length:bufSize encoding:1] autorelease];
NSLog(@"foo %@" ,p1);
return [p1 componentsSeparatedByString:@"\0"];
}
// kern_return_t kr = IOMasterPort(MACH_PORT_NULL, &masterPort);
return nil;