2012-06-20 7 views
7

Quiero identificar mi sistema Mac de forma única a través del código. Encuentro el UUID de hardware en mi Acerca de esta Mac. Entonces, ¿cómo acceder mediante programación al uuid único desde MAc OS X.Cómo identificar un sistema Mac de manera única

Sírvase proporcionarme si hay alguna sugerencia alternativa para mi problema.

Respuesta

3

A partir de aquí: 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);  
} 

puede reemplazar el CFStringGetCString con una simple conversión a NSString *.

18

lo tanto, si no se preocupan por las nuevas reglas AppStore etc ... Aquí van:

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

Por favor Nota:

  • es necesario agregar a su IOKit.framework proyecto para que este funcione.
  • Este código es compatible con ARC;
  • Este código es seguro y devolverá un nilNSString si algo sale mal;
  • Apple no garantiza que todos los sistemas futuros tengan un número de serie legible por software.
  • Los desarrolladores no deben hacer ninguna suposición sobre el formato del número de serie, como su longitud o qué caracteres puede contener .
+0

Debería llamarse 'IOObjectRelease (platformExpert);' dentro del bloque '! SerialNumberAsCFString'? Leyendo solo el código, esto parece ser necesario. –

+0

@DjS sí, tienes un buen punto. Hice una edición para arreglar esto. – TCB13

+1

¿Qué pasa si nos importan las nuevas reglas de AppStore? – tofutim

Cuestiones relacionadas