Я разрабатываю пару приложений для iOS, и мне нужно разделить элемент между ними, который я хочу сохранить в цепочке ключей. Этот элемент используется в сложном процессе входа в систему с 3-х или 4-х этапов, в каждом из них я должен прочитать значение из брелка, чтобы сделать это я использовал код ниже:Keychain iOS не всегда сохраняет значения
- (NSString *)installationToken
{
KeychainItemWrapper *kw = [[KeychainItemWrapper alloc] initWithIdentifier:@"uuid" accessGroup:@"yyyyy.xxxxxxxxxxx"];
if (![kw objectForKey:(NSString*)kSecAttrAccount] || [[kw objectForKey:(NSString*)kSecAttrAccount] isEqualToString:@""]) {
NSString *result;
CFUUIDRef uuid;
CFStringRef uuidStr;
uuid = CFUUIDCreate(NULL);
assert(uuid != NULL);
uuidStr = CFUUIDCreateString(NULL, uuid);
assert(uuidStr != NULL);
result = [NSString stringWithFormat:@"%@", uuidStr];
assert(result != nil);
CFRelease(uuidStr);
CFRelease(uuid);
[kw setObject:result forKey:(NSString*)kSecAttrAccount];
return result;
} else {
return [kw objectForKey:(NSString*)kSecAttrAccount];
}
}
Это все работает хорошо почти все устройства, но в некоторых, пользователи жалуются. Итак, я проверил, что получает мой сервер, и увидел, что отправляются разные значения. Я проверил код и ни в каком другом месте, я не понимаю/не очищаю этот элемент связки ключей, что может быть неправильным с этим? Для большинства устройств это работает как шарм, но по некоторым причинам на некоторых устройствах они не хранят и не извлекают из брелка. Проблема возникает при разных вызовах в одном приложении.