iOSアプリでSSKeychainの資格情報ストアに奇妙なバグがあります。ユーザーがログインすると、資格情報ストアに多数の情報が保存されます。しかし、最近、資格情報ストアはアイテムを設定していません。SSKeychain資格情報ストアが正しく設定されていませんか?
奇妙なことは、常に起こるわけではありません。場合によっては情報を設定し、期待どおりに動作します。ログイン後に資格情報ストアの値がnil
を返す場合もあります。
- (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"];
}];
}
}
あなたが成功を見ることができるように、私は資格証明ストアにアイテムを保存するが、それは時間の40%を働き、何でない60%を行い、この現在運ゲーム:私のコードは次のようになります混乱する。また、シミュレータで問題を再現するのにも苦労しています。
誰かにアイデアがあれば、より多くのコードを参照する必要があります私に教えてください。
あなただけのシミュレータでこれを気づいていますか?私はデータが引き出されず、不規則な振る舞いをしていたのと同様の問題を抱えていました。 Xcodeの再起動とシミュレータが役立つように見えましたが、時には再び戻ってくることがありました。私は、これがXcodeの最新バージョンとSSKeychainについては奇妙なことだと思います。 –
また、この執筆時点では、SSKeychainはSAMKeychainのために廃止されました。同じクラスとビヘイビアなので、SSKeychainのインスタンスの名前をSAMKeychainに変更するだけで済みます。 –
私のデバイスとシミュレータで実際に起こっています。ああ、SAMKeychainにアップグレードして助けてくれるかどうかを確認してください。 – jckly