From f746b0b6da0d24330ebc58180c97bf53b69f4e32 Mon Sep 17 00:00:00 2001 From: Andrew Tavis Date: Sat, 4 Dec 2021 11:05:00 +0100 Subject: [PATCH] #67 #68 Add baseline French and Portuguese keyboards without commands --- .../KeyboardsBase/CommandVariables.swift | 2 + .../KeyboardsBase/InterfaceVariables.swift | 2 +- .../KeyboardViewController.swift | 43 ++- .../French/FrenchKeyboardViewController.swift | 5 + Keyboards/LanguageKeyboards/French/Info.plist | 42 +++ .../LanguageKeyboards/Portuguese/Info.plist | 42 +++ .../PortugueseKeyboardViewController.swift | 5 + Scribe.xcodeproj/project.pbxproj | 331 +++++++++++++++++- 8 files changed, 457 insertions(+), 15 deletions(-) create mode 100644 Keyboards/LanguageKeyboards/French/FrenchKeyboardViewController.swift create mode 100644 Keyboards/LanguageKeyboards/French/Info.plist create mode 100644 Keyboards/LanguageKeyboards/Portuguese/Info.plist create mode 100644 Keyboards/LanguageKeyboards/Portuguese/PortugueseKeyboardViewController.swift diff --git a/Keyboards/KeyboardsBase/CommandVariables.swift b/Keyboards/KeyboardsBase/CommandVariables.swift index 56b851d4..6863da57 100644 --- a/Keyboards/KeyboardsBase/CommandVariables.swift +++ b/Keyboards/KeyboardsBase/CommandVariables.swift @@ -27,6 +27,8 @@ var tenseFPP: String = "" var tenseSPP: String = "" var tenseTPP: String = "" +let languagesWithCapitalizedNouns = ["German"] + var verbToConjugate: String = "" var verbConjugated: String = "" diff --git a/Keyboards/KeyboardsBase/InterfaceVariables.swift b/Keyboards/KeyboardsBase/InterfaceVariables.swift index 8d9a33bd..4900f2f9 100644 --- a/Keyboards/KeyboardsBase/InterfaceVariables.swift +++ b/Keyboards/KeyboardsBase/InterfaceVariables.swift @@ -151,7 +151,7 @@ public enum FrenchKeyboardConstants { ] static let symbolKeysPad = [ - ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "*", "delete"], + ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "delete"], ["~", "ᵒ", "[", "]", "{", "}", "^", "$", "£", "¥", "return"], ["123", "§", "<", ">", "|", "\\", "...", "·", "?", "'", "123"], ["ABC", "selectKeyboard", "space", "ABC", "hideKeyboard"] // "undoArrow" diff --git a/Keyboards/KeyboardsBase/KeyboardViewController.swift b/Keyboards/KeyboardsBase/KeyboardViewController.swift index c8a8e763..59ddf60e 100644 --- a/Keyboards/KeyboardsBase/KeyboardViewController.swift +++ b/Keyboards/KeyboardsBase/KeyboardViewController.swift @@ -32,7 +32,17 @@ class KeyboardViewController: UIInputViewController { /// Sets the keyboard layouts given the chosen keyboard and device type. func setKeyboardLayouts() { - if controllerLanguage == "German" { + if controllerLanguage == "French" { + if DeviceType.isPhone { + letterKeys = FrenchKeyboardConstants.letterKeysPhone + numberKeys = FrenchKeyboardConstants.numberKeysPhone + symbolKeys = FrenchKeyboardConstants.symbolKeysPhone + } else { + letterKeys = FrenchKeyboardConstants.letterKeysPad + numberKeys = FrenchKeyboardConstants.numberKeysPad + symbolKeys = FrenchKeyboardConstants.symbolKeysPad + } + } else if controllerLanguage == "German" { if DeviceType.isPhone { letterKeys = GermanKeyboardConstants.letterKeysPhone numberKeys = GermanKeyboardConstants.numberKeysPhone @@ -42,6 +52,16 @@ class KeyboardViewController: UIInputViewController { numberKeys = GermanKeyboardConstants.numberKeysPad symbolKeys = GermanKeyboardConstants.symbolKeysPad } + } else if controllerLanguage == "Portuguese" { + if DeviceType.isPhone { + letterKeys = PortugueseKeyboardConstants.letterKeysPhone + numberKeys = PortugueseKeyboardConstants.numberKeysPhone + symbolKeys = PortugueseKeyboardConstants.symbolKeysPhone + } else { + letterKeys = PortugueseKeyboardConstants.letterKeysPad + numberKeys = PortugueseKeyboardConstants.numberKeysPad + symbolKeys = PortugueseKeyboardConstants.symbolKeysPad + } } else if controllerLanguage == "Russian" { if DeviceType.isPhone { letterKeys = RussianKeyboardConstants.letterKeysPhone @@ -739,7 +759,16 @@ class KeyboardViewController: UIInputViewController { addPadding(to: stackView3, width: buttonWidth / 3, key: "y") } if DeviceType.isPhone && key == "a" && controllerLanguage == "Portuguese" { - addPadding(to: stackView3, width: buttonWidth / 3, key: "a") + addPadding(to: stackView2, width: buttonWidth / 4, key: "a") + } + if DeviceType.isPad && key == "a" && controllerLanguage == "Portuguese" { + addPadding(to: stackView2, width: buttonWidth / 3, key: "a") + } + if DeviceType.isPad && key == "@" && controllerLanguage == "Portuguese" { + addPadding(to: stackView2, width: buttonWidth / 3, key: "@") + } + if DeviceType.isPad && key == "€" && controllerLanguage == "Portuguese" { + addPadding(to: stackView2, width: buttonWidth / 3, key: "€") } keys.append(btn) @@ -793,7 +822,7 @@ class KeyboardViewController: UIInputViewController { addPadding(to: stackView3, width: buttonWidth / 3, key: "m") } if DeviceType.isPhone && key == "l" && controllerLanguage == "Portuguese" { - addPadding(to: stackView3, width: buttonWidth / 3, key: "l") + addPadding(to: stackView2, width: buttonWidth / 4, key: "l") } // specialKey styling. @@ -831,6 +860,8 @@ class KeyboardViewController: UIInputViewController { btn.widthAnchor.constraint(equalToConstant: numSymButtonWidth * 2).isActive = true } else if controllerLanguage == "Russian" && row == 2 && DeviceType.isPhone { btn.widthAnchor.constraint(equalToConstant: numSymButtonWidth * 1.5).isActive = true + } else if key == "return" && controllerLanguage == "Portuguese" && row == 1 && DeviceType.isPad { + btn.widthAnchor.constraint(equalToConstant: numSymButtonWidth * 1.5).isActive = true } else { btn.widthAnchor.constraint(equalToConstant: numSymButtonWidth * 1).isActive = true } @@ -930,7 +961,7 @@ class KeyboardViewController: UIInputViewController { var noun = previewBar?.text!.substring(with: pluralPrompt.count..<((previewBar?.text!.count)!-1)) var queriedWordIsUpperCase: Bool = false // Check to see if the input was uppercase to return an uppercase plural. - if controllerLanguage == "Russian" || controllerLanguage == "Spanish" { + if !languagesWithCapitalizedNouns.contains(controllerLanguage) { let firstLetter = noun?.substring(toIdx: 1) queriedWordIsUpperCase = firstLetter!.isUppercase noun = noun?.lowercased() @@ -960,7 +991,7 @@ class KeyboardViewController: UIInputViewController { var selectedWord = proxy.selectedText // Check to see if the input was uppercase to return an uppercase plural. var queriedWordIsUpperCase: Bool = false - if controllerLanguage == "Russian" || controllerLanguage == "Spanish" { + if !languagesWithCapitalizedNouns.contains(controllerLanguage) { let firstLetter = selectedWord?.substring(toIdx: 1) queriedWordIsUpperCase = firstLetter!.isUppercase selectedWord = selectedWord?.lowercased() @@ -1018,7 +1049,7 @@ class KeyboardViewController: UIInputViewController { if lastWordTyped != "" { // Check to see if the input was uppercase to return an uppercase plural. var queriedWordIsUpperCase: Bool = false - if controllerLanguage == "Russian" || controllerLanguage == "Spanish" { + if !languagesWithCapitalizedNouns.contains(controllerLanguage) { let firstLetter = lastWordTyped?.substring(toIdx: 1) queriedWordIsUpperCase = firstLetter!.isUppercase lastWordTyped = lastWordTyped?.lowercased() diff --git a/Keyboards/LanguageKeyboards/French/FrenchKeyboardViewController.swift b/Keyboards/LanguageKeyboards/French/FrenchKeyboardViewController.swift new file mode 100644 index 00000000..2b85a488 --- /dev/null +++ b/Keyboards/LanguageKeyboards/French/FrenchKeyboardViewController.swift @@ -0,0 +1,5 @@ +// +// FrenchKeyboardViewController.swift +// + +class FrenchKeyboardViewController: KeyboardViewController {} diff --git a/Keyboards/LanguageKeyboards/French/Info.plist b/Keyboards/LanguageKeyboards/French/Info.plist new file mode 100644 index 00000000..bea73a87 --- /dev/null +++ b/Keyboards/LanguageKeyboards/French/Info.plist @@ -0,0 +1,42 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Français + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Français + CFBundlePackageType + XPC! + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSExtension + + NSExtensionAttributes + + IsASCIICapable + + PrefersRightToLeft + + PrimaryLanguage + fr + RequestsOpenAccess + + + NSExtensionPointIdentifier + com.apple.keyboard-service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).KeyboardViewController + + + diff --git a/Keyboards/LanguageKeyboards/Portuguese/Info.plist b/Keyboards/LanguageKeyboards/Portuguese/Info.plist new file mode 100644 index 00000000..87080a96 --- /dev/null +++ b/Keyboards/LanguageKeyboards/Portuguese/Info.plist @@ -0,0 +1,42 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Português + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Português + CFBundlePackageType + XPC! + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSExtension + + NSExtensionAttributes + + IsASCIICapable + + PrefersRightToLeft + + PrimaryLanguage + pt + RequestsOpenAccess + + + NSExtensionPointIdentifier + com.apple.keyboard-service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).KeyboardViewController + + + diff --git a/Keyboards/LanguageKeyboards/Portuguese/PortugueseKeyboardViewController.swift b/Keyboards/LanguageKeyboards/Portuguese/PortugueseKeyboardViewController.swift new file mode 100644 index 00000000..221e8c09 --- /dev/null +++ b/Keyboards/LanguageKeyboards/Portuguese/PortugueseKeyboardViewController.swift @@ -0,0 +1,5 @@ +// +// PortugueseKeyboardViewController.swift +// + +class PortugueseKeyboardViewController: KeyboardViewController {} diff --git a/Scribe.xcodeproj/project.pbxproj b/Scribe.xcodeproj/project.pbxproj index d1c4f156..ce18cb94 100644 --- a/Scribe.xcodeproj/project.pbxproj +++ b/Scribe.xcodeproj/project.pbxproj @@ -19,6 +19,28 @@ D10182132728275B0032A82D /* verbs.json in Resources */ = {isa = PBXBuildFile; fileRef = D10182102728275B0032A82D /* verbs.json */; }; D101821D2728291B0032A82D /* nouns.json in Resources */ = {isa = PBXBuildFile; fileRef = D101821A2728291B0032A82D /* nouns.json */; }; D1018220272829E70032A82D /* verbs.json in Resources */ = {isa = PBXBuildFile; fileRef = D101821B2728291B0032A82D /* verbs.json */; }; + D109A20E275B6888005E2271 /* FrenchKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D109A20D275B6888005E2271 /* FrenchKeyboardViewController.swift */; }; + D109A212275B6888005E2271 /* French.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = D109A20B275B6888005E2271 /* French.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + D109A21D275B68B3005E2271 /* PortugueseKeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D109A21C275B68B3005E2271 /* PortugueseKeyboardViewController.swift */; }; + D109A221275B68B3005E2271 /* Portuguese.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = D109A21A275B68B3005E2271 /* Portuguese.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + D109A227275B6A8B005E2271 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; + D109A228275B6A8B005E2271 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DD94F022D6A40000FF8845 /* Extensions.swift */; }; + D109A229275B6A8B005E2271 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; + D109A22A275B6A8B005E2271 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; + D109A22B275B6A8B005E2271 /* Keyboard.xib in Resources */ = {isa = PBXBuildFile; fileRef = D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */; }; + D109A22C275B6A8B005E2271 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; + D109A22D275B6A8C005E2271 /* KeyboardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2592742565500705659 /* KeyboardViewController.swift */; }; + D109A22E275B6A8C005E2271 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38DD94F022D6A40000FF8845 /* Extensions.swift */; }; + D109A22F275B6A8C005E2271 /* ColorVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B240274056D400705659 /* ColorVariables.swift */; }; + D109A230275B6A8C005E2271 /* InterfaceVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2492741B31F00705659 /* InterfaceVariables.swift */; }; + D109A231275B6A8C005E2271 /* Keyboard.xib in Resources */ = {isa = PBXBuildFile; fileRef = D1C0ACD92719E0AA001E11C3 /* Keyboard.xib */; }; + D109A232275B6A8C005E2271 /* CommandVariables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B2462741B24F00705659 /* CommandVariables.swift */; }; + D109A233275B6A91005E2271 /* ScribeBtnPhone.png in Resources */ = {isa = PBXBuildFile; fileRef = D12E537327594C1E000205F9 /* ScribeBtnPhone.png */; }; + D109A234275B6A91005E2271 /* ScribeBtnPad.png in Resources */ = {isa = PBXBuildFile; fileRef = D18575D92756690C00BA7F8A /* ScribeBtnPad.png */; }; + D109A235275B6A92005E2271 /* ScribeBtnPhone.png in Resources */ = {isa = PBXBuildFile; fileRef = D12E537327594C1E000205F9 /* ScribeBtnPhone.png */; }; + D109A236275B6A92005E2271 /* ScribeBtnPad.png in Resources */ = {isa = PBXBuildFile; fileRef = D18575D92756690C00BA7F8A /* ScribeBtnPad.png */; }; + D109A237275B6A99005E2271 /* LoadData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LoadData.swift */; }; + D109A238275B6A9A005E2271 /* LoadData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D190B24D2741B61000705659 /* LoadData.swift */; }; D11E3B6927299C6F00FBE62C /* translations.json in Resources */ = {isa = PBXBuildFile; fileRef = D11E3B6827299C6F00FBE62C /* translations.json */; }; D11E3B6B27299C8000FBE62C /* translations.json in Resources */ = {isa = PBXBuildFile; fileRef = D11E3B6A27299C8000FBE62C /* translations.json */; }; D12E537427594C1E000205F9 /* ScribeBtnPhone.png in Resources */ = {isa = PBXBuildFile; fileRef = D12E537327594C1E000205F9 /* ScribeBtnPhone.png */; }; @@ -63,6 +85,20 @@ remoteGlobalIDString = 38BD214B22D592CA00C6795D; remoteInfo = typEmoji; }; + D109A210275B6888005E2271 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 38BD212822D5907E00C6795D /* Project object */; + proxyType = 1; + remoteGlobalIDString = D109A20A275B6888005E2271; + remoteInfo = French; + }; + D109A21F275B68B3005E2271 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 38BD212822D5907E00C6795D /* Project object */; + proxyType = 1; + remoteGlobalIDString = D109A219275B68B3005E2271; + remoteInfo = Portuguese; + }; D160866A270B6D3C00134D48 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 38BD212822D5907E00C6795D /* Project object */; @@ -87,7 +123,9 @@ dstSubfolderSpec = 13; files = ( 38BD215322D592CA00C6795D /* German.appex in Embed App Extensions */, + D109A221275B68B3005E2271 /* Portuguese.appex in Embed App Extensions */, D160866C270B6D3C00134D48 /* Spanish.appex in Embed App Extensions */, + D109A212275B6888005E2271 /* French.appex in Embed App Extensions */, D1671A67275A1E8700A7C118 /* Russian.appex in Embed App Extensions */, ); name = "Embed App Extensions"; @@ -111,6 +149,12 @@ D10182102728275B0032A82D /* verbs.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = verbs.json; sourceTree = ""; }; D101821A2728291B0032A82D /* nouns.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = nouns.json; sourceTree = ""; }; D101821B2728291B0032A82D /* verbs.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = verbs.json; sourceTree = ""; }; + D109A20B275B6888005E2271 /* French.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = French.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + D109A20D275B6888005E2271 /* FrenchKeyboardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrenchKeyboardViewController.swift; sourceTree = ""; }; + D109A20F275B6888005E2271 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D109A21A275B68B3005E2271 /* Portuguese.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Portuguese.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + D109A21C275B68B3005E2271 /* PortugueseKeyboardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PortugueseKeyboardViewController.swift; sourceTree = ""; }; + D109A21E275B68B3005E2271 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; D11E3B6827299C6F00FBE62C /* translations.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = translations.json; sourceTree = ""; }; D11E3B6A27299C8000FBE62C /* translations.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = translations.json; sourceTree = ""; }; D12E537327594C1E000205F9 /* ScribeBtnPhone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ScribeBtnPhone.png; sourceTree = ""; }; @@ -149,6 +193,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D109A208275B6888005E2271 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D109A217275B68B3005E2271 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; D1608662270B6D3C00134D48 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -187,6 +245,8 @@ 38BD214C22D592CA00C6795D /* German.appex */, D1608665270B6D3C00134D48 /* Spanish.appex */, D1671A60275A1E8700A7C118 /* Russian.appex */, + D109A20B275B6888005E2271 /* French.appex */, + D109A21A275B68B3005E2271 /* Portuguese.appex */, ); name = Products; sourceTree = ""; @@ -214,6 +274,40 @@ path = German; sourceTree = ""; }; + D109A20C275B6888005E2271 /* French */ = { + isa = PBXGroup; + children = ( + D109A225275B68F4005E2271 /* Data */, + D109A20D275B6888005E2271 /* FrenchKeyboardViewController.swift */, + D109A20F275B6888005E2271 /* Info.plist */, + ); + path = French; + sourceTree = ""; + }; + D109A21B275B68B3005E2271 /* Portuguese */ = { + isa = PBXGroup; + children = ( + D109A226275B68FD005E2271 /* Data */, + D109A21C275B68B3005E2271 /* PortugueseKeyboardViewController.swift */, + D109A21E275B68B3005E2271 /* Info.plist */, + ); + path = Portuguese; + sourceTree = ""; + }; + D109A225275B68F4005E2271 /* Data */ = { + isa = PBXGroup; + children = ( + ); + path = Data; + sourceTree = ""; + }; + D109A226275B68FD005E2271 /* Data */ = { + isa = PBXGroup; + children = ( + ); + path = Data; + sourceTree = ""; + }; D10D36C5275A1B8F00A2EBF1 /* Data */ = { isa = PBXGroup; children = ( @@ -296,8 +390,10 @@ D1CCA15B2742B9F700902744 /* LanguageKeyboards */ = { isa = PBXGroup; children = ( + D109A20C275B6888005E2271 /* French */, 38BD214D22D592CA00C6795D /* German */, D1671A61275A1E8700A7C118 /* Russian */, + D109A21B275B68B3005E2271 /* Portuguese */, D1608666270B6D3C00134D48 /* Spanish */, ); path = LanguageKeyboards; @@ -331,6 +427,8 @@ 38BD215222D592CA00C6795D /* PBXTargetDependency */, D160866B270B6D3C00134D48 /* PBXTargetDependency */, D1671A66275A1E8700A7C118 /* PBXTargetDependency */, + D109A211275B6888005E2271 /* PBXTargetDependency */, + D109A220275B68B3005E2271 /* PBXTargetDependency */, ); name = Scribe; productName = EmojiKeyboard; @@ -354,6 +452,40 @@ productReference = 38BD214C22D592CA00C6795D /* German.appex */; productType = "com.apple.product-type.app-extension"; }; + D109A20A275B6888005E2271 /* French */ = { + isa = PBXNativeTarget; + buildConfigurationList = D109A215275B6888005E2271 /* Build configuration list for PBXNativeTarget "French" */; + buildPhases = ( + D109A207275B6888005E2271 /* Sources */, + D109A208275B6888005E2271 /* Frameworks */, + D109A209275B6888005E2271 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = French; + productName = French; + productReference = D109A20B275B6888005E2271 /* French.appex */; + productType = "com.apple.product-type.app-extension"; + }; + D109A219275B68B3005E2271 /* Portuguese */ = { + isa = PBXNativeTarget; + buildConfigurationList = D109A222275B68B3005E2271 /* Build configuration list for PBXNativeTarget "Portuguese" */; + buildPhases = ( + D109A216275B68B3005E2271 /* Sources */, + D109A217275B68B3005E2271 /* Frameworks */, + D109A218275B68B3005E2271 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Portuguese; + productName = Portuguese; + productReference = D109A21A275B68B3005E2271 /* Portuguese.appex */; + productType = "com.apple.product-type.app-extension"; + }; D1608664270B6D3C00134D48 /* Spanish */ = { isa = PBXNativeTarget; buildConfigurationList = D160866D270B6D3C00134D48 /* Build configuration list for PBXNativeTarget "Spanish" */; @@ -404,6 +536,12 @@ 38BD214B22D592CA00C6795D = { CreatedOnToolsVersion = 10.2.1; }; + D109A20A275B6888005E2271 = { + CreatedOnToolsVersion = 13.1; + }; + D109A219275B68B3005E2271 = { + CreatedOnToolsVersion = 13.1; + }; D1608664270B6D3C00134D48 = { CreatedOnToolsVersion = 13.0; }; @@ -427,7 +565,9 @@ projectRoot = ""; targets = ( 38BD212F22D5907E00C6795D /* Scribe */, + D109A20A275B6888005E2271 /* French */, 38BD214B22D592CA00C6795D /* German */, + D109A219275B68B3005E2271 /* Portuguese */, D1671A5F275A1E8700A7C118 /* Russian */, D1608664270B6D3C00134D48 /* Spanish */, ); @@ -459,6 +599,26 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D109A209275B6888005E2271 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D109A22B275B6A8B005E2271 /* Keyboard.xib in Resources */, + D109A234275B6A91005E2271 /* ScribeBtnPad.png in Resources */, + D109A233275B6A91005E2271 /* ScribeBtnPhone.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D109A218275B68B3005E2271 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D109A231275B6A8C005E2271 /* Keyboard.xib in Resources */, + D109A236275B6A92005E2271 /* ScribeBtnPad.png in Resources */, + D109A235275B6A92005E2271 /* ScribeBtnPhone.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; D1608663270B6D3C00134D48 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -529,6 +689,34 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D109A207275B6888005E2271 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D109A20E275B6888005E2271 /* FrenchKeyboardViewController.swift in Sources */, + D109A237275B6A99005E2271 /* LoadData.swift in Sources */, + D109A228275B6A8B005E2271 /* Extensions.swift in Sources */, + D109A227275B6A8B005E2271 /* KeyboardViewController.swift in Sources */, + D109A22C275B6A8B005E2271 /* CommandVariables.swift in Sources */, + D109A22A275B6A8B005E2271 /* InterfaceVariables.swift in Sources */, + D109A229275B6A8B005E2271 /* ColorVariables.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D109A216275B68B3005E2271 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D109A21D275B68B3005E2271 /* PortugueseKeyboardViewController.swift in Sources */, + D109A238275B6A9A005E2271 /* LoadData.swift in Sources */, + D109A22E275B6A8C005E2271 /* Extensions.swift in Sources */, + D109A22D275B6A8C005E2271 /* KeyboardViewController.swift in Sources */, + D109A232275B6A8C005E2271 /* CommandVariables.swift in Sources */, + D109A230275B6A8C005E2271 /* InterfaceVariables.swift in Sources */, + D109A22F275B6A8C005E2271 /* ColorVariables.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; D1608661270B6D3C00134D48 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -565,6 +753,16 @@ target = 38BD214B22D592CA00C6795D /* German */; targetProxy = 38BD215122D592CA00C6795D /* PBXContainerItemProxy */; }; + D109A211275B6888005E2271 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D109A20A275B6888005E2271 /* French */; + targetProxy = D109A210275B6888005E2271 /* PBXContainerItemProxy */; + }; + D109A220275B68B3005E2271 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D109A219275B68B3005E2271 /* Portuguese */; + targetProxy = D109A21F275B68B3005E2271 /* PBXContainerItemProxy */; + }; D160866B270B6D3C00134D48 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = D1608664270B6D3C00134D48 /* Spanish */; @@ -729,7 +927,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = org.scribe; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -752,7 +950,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = org.scribe; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -776,7 +974,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = org.scribe.german; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -801,7 +999,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = org.scribe.german; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -811,6 +1009,105 @@ }; name = Release; }; + D109A213275B6888005E2271 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ATJ9U3WZ27; + INFOPLIST_FILE = "$(SRCROOT)/Keyboards/LanguageKeyboards/French/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "Français (Scribe)"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.scribe.french; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + D109A214275B6888005E2271 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ATJ9U3WZ27; + INFOPLIST_FILE = "$(SRCROOT)/Keyboards/LanguageKeyboards/French/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "Français (Scribe)"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.scribe.french; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + D109A223275B68B3005E2271 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ATJ9U3WZ27; + INFOPLIST_FILE = "$(SRCROOT)/Keyboards/LanguageKeyboards/Portuguese/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "Português (Scribe)"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.scribe.portuguese; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + D109A224275B68B3005E2271 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = ATJ9U3WZ27; + INFOPLIST_FILE = "$(SRCROOT)/Keyboards/LanguageKeyboards/Portuguese/Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "Português (Scribe)"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.1.0; + PRODUCT_BUNDLE_IDENTIFIER = org.scribe.portuguese; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; D160866E270B6D3C00134D48 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -826,7 +1123,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = org.scribe.spanish; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -851,7 +1148,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = org.scribe.spanish; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -876,7 +1173,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = org.scribe.russian; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -901,7 +1198,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = org.scribe.russian; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -941,6 +1238,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + D109A215275B6888005E2271 /* Build configuration list for PBXNativeTarget "French" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D109A213275B6888005E2271 /* Debug */, + D109A214275B6888005E2271 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D109A222275B68B3005E2271 /* Build configuration list for PBXNativeTarget "Portuguese" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D109A223275B68B3005E2271 /* Debug */, + D109A224275B68B3005E2271 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; D160866D270B6D3C00134D48 /* Build configuration list for PBXNativeTarget "Spanish" */ = { isa = XCConfigurationList; buildConfigurations = (