현재 iOS KeyChain에 사용자 이름 (이메일)과 이메일 및 비밀번호의 솔트 된 해시를 저장하고 있습니다. 여기에 있는 ARC 버전을 사용하고 있습니다 .
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];
앱이 활성화되어있는 동안 네트워크 호출을 위해 토큰을 꺼내야 할 때이 모든 것이 잘 작동합니다. 깨끗한 시작에서 로그인하는 것은 물론 전체 네트워크 호출에 대해 작동합니다. 앱이 백그라운드에있을 때 문제가 시작됩니다.
이것은 산발적으로 만 발생하며 특정 iOS 버전 또는 기기에 아직 고정하지 않았습니다.
사용자가 위치를 이동하고 (지역 모니터링) 서버에 상태를 업데이트하고 싶습니다. 다른 모든 네트워크 호출에 대해 수행하는 것과 동일한 방식으로 키 체인에서 토큰을 꺼내고 상태를 업데이트하려고합니다. 그러나 일부 사용자의 경우 값이 nil입니다. 그것 없이는 네트워크 항목을 업데이트 할 수 없습니다. 왜 이것이 대부분의 경우 효과가 있지만 적은 비율에는 효과가 없습니까?
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
NSString *token = [wrapper objectForKey:(__bridge id)kSecValueData];
ARC 버전의 keychainwrapper로 돌아 갔지만 여전히 동일한 결과를 얻습니다. 이에 대한 의견을 보내 주시면 감사하겠습니다. 내 사용자의 작은 부분에 불과하지만 내가 고치고 싶은 문제이며 걱정하지 마십시오. 미리 감사드립니다.
또한 모든 백그라운드 작업은 시간 초과를 방지하기 위해 backgroundTask에 설정됩니다. 키 체인을 둘러싼 작업에 문제가 없지만 토큰이 채워질 때까지 일을 진행하지 않습니다.
편집 나는 배경에서 값을 검색하지 않는 키 체인 문제를 알아 냈습니다. 아래 답변을 게시하고 나중에이 질문이 다른 사람들에게 가치가있을 수 있다고 생각하므로 수락하겠습니다.