Я разрабатываю пару приложений для iOS, и мне нужно разделить между ними элемент, который я хочу сохранить в цепочке для ключей. Этот элемент используется в сложном процессе входа в систему с 3 или 4 шагами, в каждом из которых мне нужно прочитать значение из цепочки для ключей, для этого я использовал код ниже:
- (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];
}
}
Все это хорошо работает почти на каждом устройстве, но на некоторых пользователи жалуются. Итак, я проверил, что получает мой сервер, и увидел, что отправляются разные значения. Я проверил код и нигде больше не получаю/очищаю этот элемент связки ключей, что может быть не так? Для большинства устройств это работает как шарм, но по какой-то причине на некоторых устройствах они плохо хранятся или извлекаются из цепочки для ключей. Проблема возникает при разных вызовах в одном и том же приложении.