From 876da190cf15adfdd6681b194747c1b02c4a7854 Mon Sep 17 00:00:00 2001 From: Adam Gic Date: Fri, 20 Sep 2024 12:49:20 +0200 Subject: [PATCH] Use serial queue instead of concurrent for execution of iOS keychain operations to avoid concurrent writing issues (write checks for existence of item to either add or update, if in the meantime item is added, update fails). --- .../ios/Classes/SwiftFlutterSecureStoragePlugin.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/flutter_secure_storage/ios/Classes/SwiftFlutterSecureStoragePlugin.swift b/flutter_secure_storage/ios/Classes/SwiftFlutterSecureStoragePlugin.swift index 47cd3d4e..d6c27694 100644 --- a/flutter_secure_storage/ios/Classes/SwiftFlutterSecureStoragePlugin.swift +++ b/flutter_secure_storage/ios/Classes/SwiftFlutterSecureStoragePlugin.swift @@ -12,6 +12,7 @@ public class SwiftFlutterSecureStoragePlugin: NSObject, FlutterPlugin, FlutterSt private let flutterSecureStorageManager: FlutterSecureStorage = FlutterSecureStorage() private var secStoreAvailabilitySink: FlutterEventSink? + private let serialExecutionQueue = DispatchQueue(label: "flutter_secure_storage_service") public static func register(with registrar: FlutterPluginRegistrar) { let channel = FlutterMethodChannel(name: "plugins.it_nomads.com/flutter_secure_storage", binaryMessenger: registrar.messenger()) @@ -29,7 +30,7 @@ public class SwiftFlutterSecureStoragePlugin: NSObject, FlutterPlugin, FlutterSt } } - DispatchQueue.global(qos: .userInitiated).async { + serialExecutionQueue.async { switch (call.method) { case "read": self.read(call, handleResult)