Cómo obtener la dirección MAC del dispositivo iOS mediante progtwigción

¿Cómo obtengo un código MAC de un dispositivo iOS programáticamente en mi aplicación?

Ahora los dispositivos iOS 7 siempre devuelven una dirección MAC de 02: 00: 00: 00: 00: 00.

Mejor uso [UIDevice identifierForVendor]

así que es mejor llamar a este método para obtener una clave única específica de la aplicación

La categoría será más adecuada

 #import "UIDevice+Identifier.h" - (NSString *) identifierForVendor1 { if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) { return [[[UIDevice currentDevice] identifierForVendor] UUIDString]; } return @""; } 

Ahora llame al método anterior para obtener una dirección única

 NSString *like_UDID=[NSString stringWithFormat:@"%@", [[UIDevice currentDevice] identifierForVendor1]]; NSLog(@"%@",like_UDID); 

Puede obtener la dirección MAC usando la siguiente función:

 +(NSString *)getMacAddress { int mgmtInfoBase[6]; char *msgBuffer = NULL; NSString *errorFlag = NULL; size_t length; // Setup the management Information Base (mib) mgmtInfoBase[0] = CTL_NET; // Request network subsystem mgmtInfoBase[1] = AF_ROUTE; // Routing table info mgmtInfoBase[2] = 0; mgmtInfoBase[3] = AF_LINK; // Request link layer information mgmtInfoBase[4] = NET_RT_IFLIST; // Request all configured interfaces // With all configured interfaces requested, get handle index if ((mgmtInfoBase[5] = if_nametoindex("en0")) == 0) errorFlag = @"if_nametoindex failure"; // Get the size of the data available (store in len) else if (sysctl(mgmtInfoBase, 6, NULL, &length, NULL, 0) < 0) errorFlag = @"sysctl mgmtInfoBase failure"; // Alloc memory based on above call else if ((msgBuffer = malloc(length)) == NULL) errorFlag = @"buffer allocation failure"; // Get system information, store in buffer else if (sysctl(mgmtInfoBase, 6, msgBuffer, &length, NULL, 0) < 0) { free(msgBuffer); errorFlag = @"sysctl msgBuffer failure"; } else { // Map msgbuffer to interface message structure struct if_msghdr *interfaceMsgStruct = (struct if_msghdr *) msgBuffer; // Map to link-level socket structure struct sockaddr_dl *socketStruct = (struct sockaddr_dl *) (interfaceMsgStruct + 1); // Copy link layer address data in socket structure to an array unsigned char macAddress[6]; memcpy(&macAddress, socketStruct->sdl_data + socketStruct->sdl_nlen, 6); // Read from char array into a string object, into traditional Mac address format NSString *macAddressString = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X", macAddress[0], macAddress[1], macAddress[2], macAddress[3], macAddress[4], macAddress[5]]; if(IsDEBUG) NSLog(@"Mac Address: %@", macAddressString); // Release the buffer memory free(msgBuffer); return macAddressString; } // Error... if(IsDEBUG) NSLog(@"Error: %@", errorFlag); return errorFlag; } 

Pero como dijo #Randomclik, la dirección MAC no está disponible desde iOS 7 en adelante.

forma de manzana:

En iOS 7 y posteriores, si solicita la dirección MAC de un dispositivo iOS, el sistema devuelve el valor 02: 00: 00: 00: 00: 00. Si necesita identificar el dispositivo, use en su lugar la propiedad identifierForVendor de UIDevice. (Las aplicaciones que necesitan un identificador para sus propios fines publicitarios deberían considerar el uso de la propiedad advertisingIdentifier de ASIdentifierManager).

enlace: https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS7.html#//apple_ref/doc/uid/TP40013162-SW1

Conversación sobre la dirección MAC:

¿Cómo puedo obtener programáticamente la dirección MAC de un iphone?

Parece que en iOS 7 y posteriores las direcciones MAC no funcionarán. Mira lo nuevo en el documento iOS de Apple. (Sección de API desaprobadas)

se aconseja a todos que utilicen la forma ofical ios 7 y utilicen [UIDevice identifierForVendor]

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html

Y también piense en la migración de algunas suposiciones más antiguas.

Puedes obtenerlo combinando las siguientes dos respuestas, supongo.

Primero, encuentre la IP del dispositivo usando lo siguiente:

https://stackoverflow.com/a/30754194/1089206

Segundo, encuentre el MAC de esa dirección, usando lo siguiente:

https://stackoverflow.com/a/31246085/1089206

Voy a probarlo ahora y te haré saber cómo funciona.