2014-09-19 61 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