0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Flutter】PlatformException(Unexpected security result code, Code: -25299, Message: The specified item already exists in the keychain., -25299, null)

Posted at

なんかiOSだとエラーがでてくるんだけど?

Androidの方ではうまく動いていたのに、iOSの方ではうまく動かなくなった。
下のようなエラーがsecureStorage.write(Key:key, value,value);のところで出てきて解決に時間がかかったので備忘録として残しておく。

PlatformException(Unexpected security result code, Code: -25299, Message: The specified item already exists in the keychain., -25299, null)

エラーの調査と解決策

まったく同じエラーの内容がGitHubのissueに上がっていた。
ただ、ここの内容では、インスタンスの初期化とwriteを呼び出すところを分けるとうまくいったよと書かれているのみだった。
はぁ...詰んだ...と思って、あきらめそうになったが、なんだかんだ、ブレークポイントを置いて、一行ずつ実行して原因を調査していたら、「あれ?writeが通ったぞ?」ってなりました。
つまり、通常の実行だとエラーがでるが、一行ずつ実行すれば正常に動作するこということが分かりました。ここから推測するに非同期処理がなんか悪さしてるんじゃね?とコードを見返してみたところ、writeが非同期処理で大量に呼ばれていました。ほんとはいろいろなところにちりばめられていましたが、分かりやすくかくと以下のようなコードになっていました。

secureStorage.write(Key: key, Value: value);
...何らかの処理...
secureStorage.write(Key: key, Value: value);
...何らかの処理...
secureStorage.write(Key: key, Value: value);
...何らかの処理...
await secureStorage.write(Key: key, Value: value);

つまり、awaitをつけていないsecureStorageを同じkeyに対して、何回も呼び出しているようなコードになっていました...(汗)。自分の場合は、この上の方のsecureStorageは完全に不要な処理であったため、余分なところをすべて削除し、必要なsecureStorageを1回のみ呼び出すように修正しました。

...何らかの処理
await secureStorage.write(Key: key, Value: value);

すると、正常に動くようになりました。
まとめると、非同期にsecureStorage.write()を何回も呼び出していたため、同時にアクセスが発生したりしてエラーがでていたのではないかと推測しています。なので、解決には、非同期に何回も呼び出してしまっていないかチェックすると解決できるかもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?