Como saben, Apple recientemente desaprobó el uso de UDID. Así que mi solución a esto fueProblema con la compilación de Enterprise y el uso de UUID
- Generar CFUUID
- Guardar a llavero
- volver a acceder al elemento llavero allí después.
Esto ha estado funcionando bien. Pero, por alguna razón, recientemente vimos que con la instalación de una versión empresarial estamos obteniendo un UUID diferente (que se suponía que estaba almacenado en el llavero con nuestra clave de acceso única).
¿Alguien se encontró con tal situación? Aquí está el código para crear el UUID y lo almacene en llavero ..
+ (NSString *)registerUUIDWithKeyChain
{
CFUUIDRef udid = CFUUIDCreate(NULL);
NSString *uuidString = (NSString *) CFUUIDCreateString(NULL, udid);
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"UniqueApp" accessGroup:nil];
NSString *userName = @"UniqueAppName";
NSString *password = uuidString;
[keychainItem setObject:userName forKey:(id)kSecAttrAccount];
[keychainItem setObject:password forKey:(id)kSecValueData];
[keychainItem release];
return uuidString;
}
+ (NSString *)userUUID
{
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"UniqueApp" accessGroup:nil];
//Accesing the v_data was the only way. For some reason there is a runtime issue if we try to access it though "kSecValueData"
NSString *uuid = [keychainItem.keychainItemData objectForKey:@"v_Data"];
//Check if the app is installed for the first time on the device. If YES register the UUID in to the keychain.
//Also check if it is a reinstall by accessing the previous keyChainItem with our Identifier.
if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"firstRun"] intValue] == 0 && !(uuid.length > 0))
{
uuid = [UIDevice_Additions registerUUIDWithKeyChain];
NSLog(@"\n First Time Registered UUID is %@", uuid);
//after stuff done
[[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithInt:1] forKey:@"firstRun"];
[[NSUserDefaults standardUserDefaults] synchronize];
[keychainItem release];
return uuid;
}
[keychainItem release];
return uuid;
}
@end
A diferencia de CFUUID, que genera una clave aleatoria cada vez que se llama, las direcciones MAC tienen los mismos problemas sociales/éticos que los UUID. No es seguro confiar en que la dirección MAC esté disponible cuando parezca que las direcciones MAC también se eliminarán de la misma manera que los UUID. –
es una Enterprise Build, y desea mantener el UID mismo cada vez, la dirección MAC no cambiará como el UUID que usamos antes (Apple no permite usarlo) – adali
bien, como Enterprise Build, solo puede usar UUID, ** [[UIDevice currentDevice] uniqueIdentifier] ** – adali