Wie Sie wissen, hat Apple kürzlich die Verwendung von UDID eingestellt. Also meine Lösung dieses Problems warProblem mit Enterprise-Build- und UUID-Verwendung
- generieren CFUUID
- speichern es
- Re-Zugang der Schlüsselbund Artikel dort nach dem Schlüsselbund.
Das hat gut funktioniert. Aber aus irgendeinem Grund haben wir kürzlich gesehen, dass wir mit der Installation eines Enterprise-Builds eine andere UUID erhalten (die mit unserem einzigartigen Zugriffsschlüssel auf dem Schlüsselbund gespeichert werden sollte).
Ist jemand auf eine solche Situation gestoßen? Hier ist der Code die UUID und speichern Sie es auf Schlüsselbund zu schaffen ..
+ (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
Im Gegensatz zu CFUUID, die bei jedem Aufruf einen zufälligen Schlüssel generiert, haben MAC-Adressen die gleichen sozialen/ethischen Probleme wie UUIDs. Es ist unsicher, sich darauf zu verlassen, dass die MAC-Adresse verfügbar ist, wenn MAC-Adressen auf die gleiche Weise wie UUIDs zu entfernen scheinen. –
es ist ein Enterprise Build, und er möchte die UID immer gleich behalten, die MAC-Adresse wird sich nicht ändern wie UUID, die wir vorher verwendet haben (Apple erlaubt es nicht) – adali
ok, als ein Enterprise Build, den Sie einfach verwenden können UUID, ** [[UIDevice currentDevice] uniqueIdentifier] ** – adali