From dcd7c1cb084ebdc8a2f6693f0f4c7e2dd822ce6d Mon Sep 17 00:00:00 2001 From: jahorton Date: Thu, 10 Oct 2019 10:26:48 +0700 Subject: [PATCH 1/5] iOS now uses package version for models --- .../KMEI/KeymanEngine/Classes/Manager.swift | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift index b7a95b6683..db6b79ca2b 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift @@ -697,11 +697,24 @@ public class Manager: NSObject, UIGestureRecognizerDelegate { let data = try Data(contentsOf: path, options: .mappedIfSafe) let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) if let jsonResult = jsonResult as? [String:AnyObject] { + var version: String = "error" + + if let info = jsonResult["info"] as? [String:AnyObject] { + if let versionEntry = info["version"] as? [String:AnyObject] { + if let description = versionEntry["description"] as? String { + version = description; + } + } + } + + if version == "error" { + throw KMPError.invalidPackage + } + if let lexicalModels = jsonResult["lexicalModels"] as? [[String:AnyObject]] { for k in lexicalModels { let name = k["name"] as! String let lexicalModelID = k["id"] as! String - let version = k["version"] as! String //TODO: handle errors if languages do not exist //var languageName = "" From fd67db494ef98d0131d72240309e7ed360a4037c Mon Sep 17 00:00:00 2001 From: jahorton Date: Thu, 10 Oct 2019 10:33:31 +0700 Subject: [PATCH 2/5] Properly defaults 'version' if missing. --- ios/engine/KMEI/KeymanEngine/Classes/Manager.swift | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift index db6b79ca2b..c5037ec256 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift @@ -697,7 +697,7 @@ public class Manager: NSObject, UIGestureRecognizerDelegate { let data = try Data(contentsOf: path, options: .mappedIfSafe) let jsonResult = try JSONSerialization.jsonObject(with: data, options: .mutableLeaves) if let jsonResult = jsonResult as? [String:AnyObject] { - var version: String = "error" + var version: String = "1.0" if let info = jsonResult["info"] as? [String:AnyObject] { if let versionEntry = info["version"] as? [String:AnyObject] { @@ -707,10 +707,6 @@ public class Manager: NSObject, UIGestureRecognizerDelegate { } } - if version == "error" { - throw KMPError.invalidPackage - } - if let lexicalModels = jsonResult["lexicalModels"] as? [[String:AnyObject]] { for k in lexicalModels { let name = k["name"] as! String From 8ad903216e029b672b5341436239fdc9096164e2 Mon Sep 17 00:00:00 2001 From: jahorton Date: Thu, 10 Oct 2019 10:48:18 +0700 Subject: [PATCH 3/5] Adds error-checking on version --- ios/engine/KMEI/KeymanEngine/Classes/Manager.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift index c5037ec256..ac4ac78bc4 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift @@ -707,6 +707,11 @@ public class Manager: NSObject, UIGestureRecognizerDelegate { } } + // Version uses a 'conditional initializer'. If it fails, the version info is invalid. + guard let _ = Version(version) else { + throw KMPError.invalidPackage + } + if let lexicalModels = jsonResult["lexicalModels"] as? [[String:AnyObject]] { for k in lexicalModels { let name = k["name"] as! String From 4eb5f9bd5ba7b9aee871cc96d3aabe64877664c9 Mon Sep 17 00:00:00 2001 From: jahorton Date: Thu, 10 Oct 2019 11:01:08 +0700 Subject: [PATCH 4/5] Lazy version error handling --- ios/engine/KMEI/KeymanEngine/Classes/Manager.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift index ac4ac78bc4..7423c74cac 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift @@ -709,7 +709,8 @@ public class Manager: NSObject, UIGestureRecognizerDelegate { // Version uses a 'conditional initializer'. If it fails, the version info is invalid. guard let _ = Version(version) else { - throw KMPError.invalidPackage + // Marc's decision - lazy-handle the error and replace version with 1.0. + version = "1.0" } if let lexicalModels = jsonResult["lexicalModels"] as? [[String:AnyObject]] { From 905a4df362a1b3e2cadfa07d325a4dc91117b1d3 Mon Sep 17 00:00:00 2001 From: jahorton Date: Thu, 10 Oct 2019 11:39:50 +0700 Subject: [PATCH 5/5] Fixes illegal use of guard --- ios/engine/KMEI/KeymanEngine/Classes/Manager.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift index 7423c74cac..4c0c09f5d1 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Manager.swift @@ -708,8 +708,10 @@ public class Manager: NSObject, UIGestureRecognizerDelegate { } // Version uses a 'conditional initializer'. If it fails, the version info is invalid. - guard let _ = Version(version) else { - // Marc's decision - lazy-handle the error and replace version with 1.0. + if let _ = Version(version) { + // No problem + } else { + // Lazy-handle the error and replace version with 1.0. Legacy decision from 2005. version = "1.0" }