Как однозначно определить систему Mac

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

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

2 ответа

Итак, если вас не волнуют новые правила 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 не гарантирует, что все будущие системы будут иметь программно-читаемый серийный номер.
  • Разработчики не должны делать какие-либо предположения относительно формата серийного номера, такого как его длина или какие символы он может содержать.

Отсюда: /questions/2235615/unikalnyij-identifikator-oborudovaniya-v-mac-os-x/2235623#2235623

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*.

Другие вопросы по тегам