1

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

0 に答える 0