Merge pull request #3137 from keymanapp/fix/ios/debug-metadata

fix(ios): Fixes keyboard metadata decoding, tweaks to project files
This commit is contained in:
Joshua Horton 2020-05-19 08:16:06 +07:00 committed by GitHub
commit eb18ae7746
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 59 additions and 16 deletions

View file

@ -1698,6 +1698,8 @@
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
PROVISIONING_PROFILE_SPECIFIER = "";
SKIP_INSTALL = YES;
STRIP_INSTALLED_PRODUCT = NO;
STRIP_SWIFT_SYMBOLS = NO;
SUPPORTS_MACCATALYST = NO;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -1759,9 +1761,12 @@
isa = XCBuildConfiguration;
baseConfigurationReference = F27FCAF6157FD95E00FBBA20 /* Keyman-lib.xcconfig */;
buildSettings = {
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_NAME = "$(TARGET_NAME)";
STRIP_INSTALLED_PRODUCT = NO;
STRIP_STYLE = all;
STRIP_SWIFT_SYMBOLS = NO;
VALID_ARCHS = "arm64 armv7s armv7 x86_64 i386";
};
name = Debug;
@ -1770,7 +1775,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = F27FCAF6157FD95E00FBBA20 /* Keyman-lib.xcconfig */;
buildSettings = {
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
PRODUCT_NAME = "$(TARGET_NAME)";
VALID_ARCHS = "arm64 armv7s armv7 x86_64 i386";
};
@ -1882,7 +1887,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -1944,7 +1949,7 @@
isa = XCBuildConfiguration;
baseConfigurationReference = F27FCAF6157FD95E00FBBA20 /* Keyman-lib.xcconfig */;
buildSettings = {
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_NAME = "$(TARGET_NAME)";
VALID_ARCHS = "arm64 armv7s armv7 x86_64 i386";
@ -2141,8 +2146,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG NO_SENTRY";
@ -2185,8 +2190,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
ONLY_ACTIVE_ARCH = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";

View file

@ -1203,8 +1203,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "";
SDKROOT = iphoneos;
@ -1255,8 +1255,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
ONLY_ACTIVE_ARCH = NO;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
OTHER_LDFLAGS = "";
@ -1393,7 +1393,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
KEYMAN_ROOT = "$(SRCROOT)/../../..";
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "";

View file

@ -147,8 +147,6 @@
buildActionMask = 2147483647;
files = (
37EA1F20228A183E003E710C /* KeymanEngine.framework in Frameworks */,
3729344024613C9900C5428C /* ObjcExceptionBridging.framework in Frameworks */,
3729344124613CA700C5428C /* XCGLogger.framework in Frameworks */,
CECB62572463E9FA006E47B5 /* DeviceKit.framework in Frameworks */,
3729344224613CB600C5428C /* Sentry.framework in Frameworks */,
3729344324613CC200C5428C /* Zip.framework in Frameworks */,
@ -568,7 +566,7 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_BITCODE = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
@ -591,7 +589,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "";
IPHONEOS_DEPLOYMENT_TARGET = 9.1;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -647,7 +645,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "";
IPHONEOS_DEPLOYMENT_TARGET = 9.1;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
@ -664,6 +662,7 @@
CODE_SIGN_ENTITLEMENTS = FirstVoices/FirstVoices.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = D7TR486TEH;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
@ -720,6 +719,7 @@
CODE_SIGN_ENTITLEMENTS = SWKeyboard/SWKeyboard.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = D7TR486TEH;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",

View file

@ -229,7 +229,7 @@ class FVRegionStorage {
let keyboard: InstallableKeyboard = InstallableKeyboard.init(id: kb.id,
name: kb.name,
languageID: keyboardInfo.languages[keyboardInfo.languages.startIndex],
languageID: keyboardInfo.languages.keys[keyboardInfo.languages.startIndex],
languageName: kb.name,
version: keyboardInfo.version,
isRTL: false,

View file

@ -17,12 +17,50 @@ import Foundation
// display and install the keyboard into Keyman Engine. Most of the data
// in the files is ignored.
//
struct KeyboardInfoLanguage: Decodable {
let displayName: String
let languageName: String
let scriptName: String
}
struct KeyboardInfo: Decodable {
let id: String
let version: String
let name: String
let languages: [String]
let languages: [String:KeyboardInfoLanguage?]
enum CodingKeys: String, CodingKey {
case id
case version
case name
case languages
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
id = try values.decode(String.self, forKey: .id)
version = try values.decode(String.self, forKey: .version)
name = try values.decode(String.self, forKey: .name)
do {
// Ideal case - the metadata exists, giving us a dictionary of KeyboardInfoLanguage entries.
languages = try values.decode([String:KeyboardInfoLanguage].self, forKey: .languages)
} catch {
// Sometimes the metadata fails to build properly, giving us only an array of language IDs.
// If this backup fails, we deserve to crash.
let langIdArray = try values.decode([String].self, forKey: .languages)
var dict: [String:KeyboardInfoLanguage?] = [:]
langIdArray.forEach({ id in
// Fortunately, the app doesn't actually need to know the metadata; it'll function
// fine with a nil entry.
// If this changes, we'll just need to be sure to perform guard checks on the optional value.
dict.updateValue(nil, forKey: id)
})
languages = dict
}
}
}
class KeyboardInfoParser {