2012-06-20 7 views
7

Я хочу однозначно идентифицировать свою систему Mac через код. Я нахожу Hardware UUID в своем Об этом Mac. Итак, как программно получить доступ к уникальному uuid из MAc OS X.Как идентифицировать Mac-систему уникально

Просьба предоставить мне, если есть какие-либо альтернативные предложения по моей проблеме.

ответ

3

Отсюда: https://stackoverflow.com/a/2754563/610351

void get_platform_uuid(char * buf, int bufSize) { 
    io_registry_entry_t ioRegistryRoot = IORegistryEntryFromPath(kIOMasterPortDefault, "IOService:/"); 
    CFStringRef uuidCf = (CFStringRef) IORegistryEntryCreateCFProperty(ioRegistryRoot, CFSTR(kIOPlatformUUIDKey), kCFAllocatorDefault, 0); 
    IOObjectRelease(ioRegistryRoot); 
    CFStringGetCString(uuidCf, buf, bufSize, kCFStringEncodingMacRoman); 
    CFRelease(uuidCf);  
} 

Вы можете заменить CFStringGetCString с помощью простого преобразования в NSString *.

18

Так что, если вы не заботитесь о новых правилах 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;
  • Этот код является безопасным и он вернет nilNSString, если что-то пойдет не так;
  • Apple не гарантирует, что все будущие системы будут иметь программно-читаемый серийный номер.
  • Разработчикам не следует делать какие-либо предположения относительно формата серийного номера , например его длины или символов, которые могут содержать .
+0

Должен ли 'IOObjectRelease (platformExpert);' также вызываться в блоке '! SerialNumberAsCFString'? Это только чтение кода. –

+0

@ DjS да, у вас есть хорошая точка. Я сделал редактирование, чтобы исправить это. – TCB13

+1

Что делать, если мы заботимся о новых правилах AppStore? – tofutim

 Смежные вопросы

  • Нет связанных вопросов^_^