diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Extension/JSONDecoder.DateDecodingStrategy+ISO8601Fallback.swift b/ios/engine/KMEI/KeymanEngine/Classes/Extension/JSONDecoder.DateDecodingStrategy+ISO8601Fallback.swift index 5d4274bf07..ed187adfbb 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Extension/JSONDecoder.DateDecodingStrategy+ISO8601Fallback.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Extension/JSONDecoder.DateDecodingStrategy+ISO8601Fallback.swift @@ -9,6 +9,12 @@ import Foundation extension JSONDecoder.DateDecodingStrategy { + static var iso8601WithoutTimezone: JSONDecoder.DateDecodingStrategy { + let formatter = DateFormatter() + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" + return .formatted(formatter) + } static var ios8601WithFallback: JSONDecoder.DateDecodingStrategy { if #available(iOS 10.0, *) { return .iso8601 diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift index da3f542801..a8bf290877 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift @@ -595,12 +595,17 @@ public class Manager: NSObject, HTTPDownloadDelegate, UIGestureRecognizerDelegat if let keyboard = try? decoder.decode(KeyboardAPICall.self, from: data) { downloadKeyboard(keyboard) } else { - decoder.dateDecodingStrategy = .ios8601WithMilliseconds - do { - let keyboard = try decoder.decode(KeyboardAPICall.self, from: data) + decoder.dateDecodingStrategy = .iso8601WithoutTimezone + if let keyboard = try? decoder.decode(KeyboardAPICall.self, from: data) { downloadKeyboard(keyboard) - } catch { - downloadFailed(forKeyboards: [], error: error) + } else { + decoder.dateDecodingStrategy = .ios8601WithMilliseconds + do { + let keyboard = try decoder.decode(KeyboardAPICall.self, from: data) + downloadKeyboard(keyboard) + } catch { + downloadFailed(forKeyboards: [], error: error) + } } } }