Swift 2 Respuesta
Esta respuesta propugne 2011 la respuesta de Jarret Hardie. Es una extensión de Swift 2 String. Agregué comentarios en línea para explicar lo que hice y por qué, ya que navegar aquí para ver si un objeto necesita o no ser lanzado puede ser complicado aquí.
extension String {
static func macSerialNumber() -> String {
// Get the platform expert
let platformExpert: io_service_t = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice"));
// Get the serial number as a CFString (actually as Unmanaged<AnyObject>!)
let serialNumberAsCFString = IORegistryEntryCreateCFProperty(platformExpert, kIOPlatformSerialNumberKey, kCFAllocatorDefault, 0);
// Release the platform expert (we're responsible)
IOObjectRelease(platformExpert);
// Take the unretained value of the unmanaged-any-object
// (so we're not responsible for releasing it)
// and pass it back as a String or, if it fails, an empty string
return (serialNumberAsCFString.takeUnretainedValue() as? String) ?? ""
}
}
Alternativamente, la función podría volver String?
y la última línea podría no devolverá una cadena vacía. Eso podría hacer que sea más fácil reconocer las situaciones extremas en las que no se pudo recuperar el número de serie (como el escenario reparado de Mac-motherboard harrisg mencionado en su comentario a la respuesta de Jerret).
También verifiqué una gestión de memoria adecuada con Instruments.
¡Espero que alguien lo encuentre útil!
Marque esta pregunta: http://stackoverflow.com/questions/933460/unique-hardware-id-in-mac-os-x – Vladimir
Tenga una votación actualizada y una respuesta actualizada de Swift 2. ;-) –