Ich habe einen seltsamen Bug mit SSKeychains Credentialstore in meiner iOS App. Wenn sich ein Benutzer anmeldet, speichere ich eine Menge Informationen im Anmeldeinformationsspeicher. Aber kürzlich hat der Anmeldeinformationenspeicher die Elemente nicht festgelegt.SSKeychain-Berechtigungsnachweis wird nicht ordnungsgemäß eingerichtet?
Was komisch ist, passiert nicht die ganze Zeit. Manchmal legt es die Informationen fest und funktioniert wie erwartet. In anderen Fällen geben die Werte des Berechtigungsnachweisspeichers nach der Anmeldung nil
zurück. Mein Code sieht wie folgt aus:
- (void)login:(id)sender {
[SVProgressHUD show];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager setResponseSerializer:[LoginResponseSerializer serializer]];
__weak typeof(self)weakSelf = self;
NSString *urlString = [NSString stringWithFormat:@"%s%s", kBaseURL, kLoginURL];
if (self.passwordField.text && self.emailField.text) {
NSDictionary *params = @{ @"email": self.emailField.text, @"password": self.passwordField.text};
self.sessionManager = manager;
[manager POST:urlString parameters:params progress:^(NSProgress * _Nonnull uploadProgress) {
// prgress implementation
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *user = [responseObject objectForKey:@"user"];
NSString *token = user[@"auth_token"];
NSString *avatarURL = user[@"avatar_url"];
NSString *userID = [NSString stringWithFormat: @"%@", user[@"id"]];
NSString *firstName = user[@"first_name"];
NSString *lastName = user[@"last_name"];
NSString *levelOfStudy = user[@"level"];
BOOL teecher = [user[@"teecher"] boolValue];
[weakSelf.credentialStore setTeecher:teecher];
[weakSelf.credentialStore setUserId:userID];
[weakSelf.credentialStore setAvatarURL:avatarURL];
[weakSelf.credentialStore setAuthToken:token];
[weakSelf.credentialStore setFirstName:firstName];
[weakSelf.credentialStore setLastName:lastName];
[weakSelf.credentialStore setLevelOfStudy:levelOfStudy];
[weakSelf.credentialStore setEmail:self.emailField.text];
[weakSelf.credentialStore setPassword:self.passwordField.text];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager.requestSerializer setValue:token forHTTPHeaderField:@"auth_token"];
[manager setResponseSerializer:[CustomerResponseSerializer serializer]];
NSString *urlString = [NSString stringWithFormat:@"%s%s", kBaseURL, kCustomerURL];
[manager GET:urlString parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {
// progress implementation
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *sources = [responseObject objectForKey:@"sources"];
NSArray *cards = (NSArray *)sources[@"data"];
[weakSelf.credentialStore setHasCreditCard:(cards.count > 0)];
[weakSelf.credentialStore setSignUp:false];
[SVProgressHUD dismiss];
[self.navigationController popViewControllerAnimated:NO];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[SVProgressHUD showErrorWithStatus:@"Failed to refresh cards."];
}];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[SVProgressHUD showErrorWithStatus:@"Login Failed"];
}];
}
}
Wie man auf Erfolg sehen können speichere ich die Elemente in dem Speicher der Anmeldeinformationen aber diese derzeit ein Glück Spiel, in dem es 40% der Zeit arbeitet und nicht mehr als 60%, was ist, was verwirrend. Ich bemühe mich auch, das Problem am Simulator neu zu erstellen.
Wenn jemand Ideen hat? oder muss mehr Code sehen lassen Sie es mich wissen.
Sind Sie nur diese in den Simulator zu bemerken? Ich hatte ähnliche Probleme, bei denen Daten nicht herausgezogen wurden und unregelmäßiges Verhalten aufwiesen. Ein Neustart von Xcode und dem Simulator schien zu helfen, kam aber manchmal wieder zurück. Ich denke, das ist nur etwas seltsam an der neuesten Version von Xcode und weniger an SSKeychain. –
Außerdem wurde SSKeychain zum Zeitpunkt dieses Schreibens zugunsten von SAMKeychain veraltet. Gleiche Klassen und Verhalten, also sollten Sie nur Ihre Instanzen von SSKeychain in SAMKeychain umbenennen. –
Es passiert tatsächlich auf meinem Gerät und im Simulator. ah vielleicht Upgrade auf SAMKeychain und sehen, ob das hilft – jckly