Так что, если вы не заботитесь о новых правилах AppStore и т.д. ... здесь вы идете:
- (NSString *)getSystemUUID {
io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault,IOServiceMatching("IOPlatformExpertDevice"));
if (!platformExpert)
return nil;
CFTypeRef serialNumberAsCFString = IORegistryEntryCreateCFProperty(platformExpert,CFSTR(kIOPlatformUUIDKey),kCFAllocatorDefault, 0);
IOObjectRelease(platformExpert);
if (!serialNumberAsCFString)
return nil;
return (__bridge NSString *)(serialNumberAsCFString);;
}
Пожалуйста, обратите внимание:
- Вам нужно добавить к вашему
IOKit.framework
проект для этого для работы.
- Этот код совместим с ARC;
- Этот код является безопасным и он вернет
nil
NSString
, если что-то пойдет не так;
- Apple не гарантирует, что все будущие системы будут иметь программно-читаемый серийный номер.
- Разработчикам не следует делать какие-либо предположения относительно формата серийного номера , например его длины или символов, которые могут содержать .
Должен ли 'IOObjectRelease (platformExpert);' также вызываться в блоке '! SerialNumberAsCFString'? Это только чтение кода. –
@ DjS да, у вас есть хорошая точка. Я сделал редактирование, чтобы исправить это. – TCB13
Что делать, если мы заботимся о новых правилах AppStore? – tofutim