Ich speichere derzeit den Benutzernamen (E-Mail) und einen gesalzenen Hash der E-Mail und des Passworts in iOS KeyChain. Ich verwende die ARC'ified Version gefunden hier .
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];
Dies alles funktioniert einwandfrei, wenn ich das Token für meine Netzwerkanrufe herausziehen muss, während die App aktiv ist. Es funktioniert für die Anmeldung von einem sauberen Start sowie für alle Netzwerkanrufe im gesamten Gebäude. Das Problem beginnt, wenn sich die App im Hintergrund befindet.
Denken Sie daran, dass dies nur sporadisch geschieht und ich es noch nicht auf eine bestimmte iOS-Version oder ein bestimmtes iOS-Gerät festgelegt habe.
Der Benutzer löst einen Standort aus (Regionsüberwachung) und ich möchte den Server mit seinem Status aktualisieren. Ich versuche, das Token wie bei jedem anderen Netzwerkanruf aus dem Schlüsselbund zu ziehen und den Status zu aktualisieren. Für einige Benutzer ist der Wert jedoch Null. Ohne sie kann ich das Netzwerkmaterial nicht aktualisieren. Warum sollte dies für die meisten funktionieren, aber nicht für einen kleinen Prozentsatz?
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"MyCustomIdentifier" accessGroup:nil];
NSString *token = [wrapper objectForKey:(__bridge id)kSecValueData];
Ich bin zur Nicht-ARC-Version des Schlüsselbundverpackers zurückgekehrt, erhalte aber immer noch die gleichen Ergebnisse. Ich würde mich über jedes Feedback dazu freuen. Es ist nur ein kleiner Teil meiner Benutzer, aber es ist ein Problem, das ich beheben möchte und über das ich mir keine Sorgen machen möchte. Danke im Voraus.
Außerdem wird meine gesamte Hintergrundarbeit in einer backgroundTask eingerichtet, um zu verhindern, dass Zeitüberschreitungen auftreten. Ich habe keine Probleme mit der Arbeit rund um den Schlüsselbund, aber ich lasse die Dinge nicht weitergehen, bis mein Token gefüllt ist.
BEARBEITEN Ich habe mein Problem mit dem Schlüsselbund herausgefunden, bei dem keine Werte aus dem Hintergrund abgerufen werden. Ich werde die Antwort unten posten und akzeptieren, da ich der Meinung bin, dass diese Frage später für andere wertvoll werden kann.