コードが実行されている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;