在iOS 8中如何获取设备序列号?

3

以下方法使用IOKit获取设备序列号,但在iOS 8中会导致应用程序崩溃。有没有人知道这方面的解决方法?我有大量企业拥有的公开可用设备,它们使用企业应用程序,不适用于应用商店提交,并使用序列号来唯一标识设备。

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

在 CFGetTypeID 上出现 EXC_BAD_ACCESS 错误导致程序崩溃。

控制台记录:* -[NSKeyedUnarchiver initForReadingWithData:]: data is NULL


可能需要展示导致崩溃的代码。 - DrC
初步尝试在Google上搜索此内容似乎并不很有前途。苹果认为这是一种侵犯隐私的行为,因此他们不支持它作为一种功能。您最好通过用户身份识别来解决问题。 - Robert Harvey
1个回答

2

它崩溃的原因是platformSerialNumber为空。

iOS 8 Beta 5起,IOPlatformSerialNumber属性已被移除,调用获取其值的方法将返回nil。


IORegistryEntryCreateCFProperty 是问题所在。 - Everus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接