How to identify a Mac System uniquely

后端 未结 2 904
慢半拍i
慢半拍i 2021-02-01 10:05

I want to identify my mac system uniquely via code. I find the Hardware UUID in my About this Mac. So how to programmatically access the unique uuid from MAc OS X.

Kindl

相关标签:
2条回答
  • 2021-02-01 10:44

    From here: 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);    
    }
    

    You can replace the CFStringGetCString with a simple conversion to NSString*.

    0 讨论(0)
  • 2021-02-01 10:54

    So, if you don't care about the new AppStore rules etc... here you go:

    - (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);;
    }
    

    Please Note:

    • You need to add IOKit.framework to your project in order for this to work.
    • This code is ARC compliant;
    • This code is safe and it will return a nil NSString if something goes wrong;
    • Apple does not guarantee that all future systems will have a software-readable serial number.
    • Developers should not make any assumptions about the format of the serial number such as its length or what characters it may contain.
    0 讨论(0)
提交回复
热议问题