No momento, estou armazenando o nome de usuário (e-mail) e um hash com sal do e-mail e senha no iOS KeyChain. Estou usando a versão ARC'ified encontrada aqui .
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
[wrapper setObject:APP_NAME forKey:(__bridge id)kSecAttrService];
[wrapper setObject:email forKey:(__bridge id)kSecAttrAccount];
[wrapper setObject:token forKey:(__bridge id)kSecValueData];
Tudo isso funciona bem quando preciso puxar o token para minhas chamadas de rede enquanto o aplicativo está ativo. Ele funciona para fazer login a partir de uma inicialização limpa, bem como para todas as chamadas de rede. O problema começa quando o aplicativo está em segundo plano.
Lembre-se de que isso só acontece esporadicamente e ainda preciso definir uma versão ou dispositivo específico do iOS.
O usuário tropeça em um local (monitoramento de região) e eu quero atualizar o servidor com seu status. Tento retirar o token do chaveiro, da mesma forma que faço para todas as outras chamadas de rede, e atualizo o status. Mas, para alguns usuários, o valor é nulo. Sem ele, não consigo atualizar as coisas da rede. Por que isso funcionaria para a maioria, mas não para uma pequena porcentagem?
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
NSString *token = [wrapper objectForKey:(__bridge id)kSecValueData];
Voltei para a versão não ARC do keychainwrapper, mas ainda obtenho os mesmos resultados. Eu gostaria de receber qualquer feedback sobre isso. É apenas uma pequena parte dos meus usuários, mas é um problema que eu gostaria de corrigir e não me preocuparia. Desde já, obrigado.
Além disso, todo o meu trabalho em segundo plano é configurado em uma backgroundTask para evitar que as coisas se esgotem. Não estou tendo problemas com o trabalho em torno do chaveiro, mas não deixo as coisas avançarem até que meu token seja preenchido.
EDITAR Eu descobri meu problema com as chaves que não recuperam valores do fundo. Vou postar a resposta abaixo e aceitá-la, pois sinto que essa pergunta pode ser valiosa para outras pessoas mais tarde.