Как однозначно определить систему 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;
- Этот код безопасен, и он вернет
nil
NSString
если что-то пойдет не так; - 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*.