Los identificadores de proveedores no funcionan en la versión 5.0 de iOS

Estoy usando el identificador de proveedor ya que el uso de UDID está en desuso, pero después de usar esta aplicación no funciona en los dispositivos con una versión de iOS inferior a 6.0. ¿Alguien puede decirme qué hay que hacer? ¿La aplicación solo será compatible con iOS 6.0 y superior? ¿Cómo hago que mi aplicación funcione en dispositivos con una versión de iOS inferior a 6.0? A continuación se muestra el código que estoy usando:

static NSString *uniqueIdentifier = nil; id vendorIdObject = [[UIDevice currentDevice] identifierForVendor]; uniqueIdentifier = [vendorIdObject UUIDString]; 

Puede hacer algo como esto (tenga en count que el identificador que devuelve no está vinculado al dispositivo y cambiará si el usuario borra y reinstala la aplicación):

 NSString* uniqueIdentifier = nil; if( [UIDevice instancesRespondToSelector:@selector(identifierForVendor)] ) { // iOS 6+ uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; } else { // before iOS 6, so just generate an identifier and store it uniqueIdentifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identiferForVendor"]; if( !uniqueIdentifier ) { CFUUIDRef uuid = CFUUIDCreate(NULL); uniqueIdentifier = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, uuid); CFRelease(uuid); [[NSUserDefaults standardUserDefaults] setObject:uniqueIdentifier forKey:@"identifierForVendor"]; } } 

Esto generará un identificador pre-iOS-6 y lo almacenará en valores pnetworkingeterminados, por lo que generalmente es el mismo identificador. Si tiene un grupo llavero y un set de aplicaciones que necesitan usar el identificador de una manera similar a la del identifierForVendor ForVendor, podría savela en el llavero en lugar de los valores pnetworkingeterminados del usuario.

Solución posible:

  1. Compruebe la versión de iOS en time de ejecución
  2. Si es iOS 6+ use el identifierForVendor ForVendor
  3. Si es menor que iOS 6 use uniqueIdentifier

Editar: Como dijo rmaddy, la tienda rechazará la aplicación.

Entonces, la mejor manera es usar CFUUIDCreate() :

 CFUUIDRef locUDIDRef = CFUUIDCreate(NULL); CFStringRef locUDIDRefString = CFUUIDCreateString(NULL, locUDIDRef); NSString *locUDID = [NSString stringWithString:(NSString *) locUDIDRefString]; CFRelease(locUDIDRef); CFRelease(uuidStringRef); 

Alternativas de reference para UDID en iOS 6