diff --git a/Scripts/LintLocalizableStrings.swift b/Scripts/LintLocalizableStrings.swift index f6024a848..ed0ec4ab7 100755 --- a/Scripts/LintLocalizableStrings.swift +++ b/Scripts/LintLocalizableStrings.swift @@ -12,7 +12,7 @@ import Foundation -typealias JSON = [String:Any] +typealias JSON = [String:AnyHashable] extension ProjectState { /// Adding `// stringlint:disable` to the top of a source file (before imports) or after a string will mean that file/line gets @@ -242,27 +242,25 @@ enum ScriptAction: String { var updatedInfoPlistJSON: JSON = projectState.infoPlistLocalizationFile.json ProjectState.permissionStrings.forEach { key in guard let nsKey: String = ProjectState.permissionStringsMap[key] else { return } - var updatedStrings: JSON = projectState.localizationFile.strings[key] as! JSON - if let localizations: JSON = updatedStrings["localizations"] as? JSON { - var updatedLocalizations: JSON = localizations - localizations.forEach { locale , stringUint in - var updatedStringUnit: JSON = stringUint as! JSON - if let translation: JSON = updatedStringUnit["stringUnit"] as? JSON, - let value: String = translation["value"] as? String - { - var updatedTranslation: JSON = translation - let updatedValue: String = value.replacingOccurrences(of: "{app_name}", with: "Session") - updatedTranslation["value"] = updatedValue - updatedStringUnit["stringUnit"] = updatedTranslation - updatedLocalizations[locale] = updatedStringUnit - } - + if + let stringsData: Data = try? JSONSerialization.data(withJSONObject: (projectState.localizationFile.strings[key] as! JSON), options: [ .fragmentsAllowed ]), + let stringsJSONString: String = String(data: stringsData, encoding: .utf8) + { + let updatedStringsJSONString = stringsJSONString.replacingOccurrences(of: "{app_name}", with: "Session") + + if + let updatedStringsData: Data = updatedStringsJSONString.data(using: .utf8), + let updatedStrings: JSON = try? JSONSerialization.jsonObject(with: updatedStringsData, options: [ .fragmentsAllowed ]) as? JSON + { + strings[nsKey] = updatedStrings } - updatedStrings["localizations"] = updatedLocalizations } - strings[nsKey] = updatedStrings } updatedInfoPlistJSON["strings"] = strings + + guard updatedInfoPlistJSON != projectState.infoPlistLocalizationFile.json else { + return + } if let data: Data = try? JSONSerialization.data(withJSONObject: updatedInfoPlistJSON, options: [ .fragmentsAllowed ]) { do {