2014-09-19 77 views
3

下面的方法使用IOKit来获取设备序列号,但现在使用iOS 8会使应用程序崩溃。有没有人知道这个工作?我拥有大量公用设备的公开可用设备,其中包含的企业应用程序不适用于应用商店提交,并且它们使用序列号来唯一标识设备。你如何获得iOS 8的设备序列号?

CFTypeRef platformSerialNumber = IORegistryEntryCreateCFProperty(platformExpertDevice, CFSTR("IOPlatformSerialNumber"), kCFAllocatorDefault, 0); 
if (CFGetTypeID(platformSerialNumber) == CFStringGetTypeID()) 
{ 
    serialNumber = [NSString stringWithString:(__bridge NSString*)platformSerialNumber]; 
    CFRelease(platformSerialNumber); 
} 
IOObjectRelease(platformExpertDevice); 

它使用EXC_BAD_ACCESS在CFGetTypeID上崩溃。

控制台日志:* - [NSKeyedUnarchiver initForReadingWithData:]:数据是NULL

+0

可能想显示崩溃的代码。 – DrC 2014-09-19 19:54:32

+0

谷歌搜索的尝试似乎并不乐观。苹果认为这是一种隐私侵扰,所以他们不支持它作为一种能力。用户可能会更好地识别。 – 2014-09-19 19:57:30

回答

2

它崩溃,因为platformSerialNumber为零。

从iOS 8 Beta 5开始,IOPlatformSerialNumber属性被删除,现在检索其值的调用返回nil。

+0

纠正它的IORegistryEntryCreateCFProperty问题 – Everus 2014-09-26 22:12:49