如何唯一地识别Mac系统

时间:2012-06-20 06:10:38

标签: objective-c macos hardware-id

我想通过代码唯一地识别我的mac系统。我在关于这台Mac上找到了硬件UUID。 那么如何以编程方式从MAc OS X访问唯一的uuid。

如果对我的问题有任何其他建议,请提供给我。

2 个答案:

答案 0 :(得分:19)

所以,如果您不关心新的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不保证所有未来的系统都具有软件可读的序列号。
  • 开发人员不应该对此做出任何假设 序列号的格式,例如它的长度或字符 可能包含。

答案 1 :(得分: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);    
}

您可以使用简单的NSString *转换来替换CFStringGetCString。