下面的方法使用 IOKit 来获取设备序列号,但现在使用 iOS 8 它会使应用程序崩溃。有没有人知道解决这个问题?我有大量企业拥有的公共(public)可用设备,其中包含不用于应用商店提交的企业应用程序,它们使用序列号来唯一标识设备。

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:]: data is NULL

最佳答案

它崩溃是因为 platformSerialNumber 为零。

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

关于ios8 - iOS 8 中如何获取设备序列号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25941418/

10-12 04:47