KeyboardKit

KeyboardKit is a Swift SDK that lets you create fully customizable keyboards with a few lines of code, using SwiftUI.

MIT License

Stars
1.5K
Committers
29

Bot releases are hidden (Show)

KeyboardKit - Latest Release

Published by danielsaidi about 1 month ago

This version re-adds the old way of opening URLs, but makes it work with iOS 18. This means that url actions are once again rendered as full-gesture buttons.

This version makes the dictation service use an OpenURLAction to return to the previous app, since a keyboard action handler can't resolve a proper controller within the main app.

This version also adds support to the standard action handler and autocomplete context, for auto-ignoring words that have an autocorrection when pressing backspace. This will improve the typing experience a great deal.

The Keyboard.NextKeyboardButton has two new experimental modes, that will hopefully remove the need to pass in a controller or use the shared one, and also keep the switcher working when typing within the keyboard.

๐Ÿงช Experimental

Keyboard.NextKeyboardButtonControllerMode is a temporary type that lets us test if we can create a next keyboard button without having to pass in a controller.

Set .current to any of these values to try them out:

  • .classic is the current mode that requires us to pass in a controller or use the shared one.
  • .experimental is a new test mode that makes the button create an internal controller instead.
  • .experimentalNilTarget is a new test mode that makes the button use nil as the action target.

NextKeyboardButtonProxyMode is a temporary type that lets us test if we can unregister an active textInputProxy to let the user switch keyboard while typing in a text field within the keyboard.

Set .current to any of these values to try them out:

  • .classic doesn't reset the input controller and therefore doesn't let you switch keyboard while editing.
  • .experimental is a new test more that temporarily disables the text input proxy, which makes the switcher work.

Make sure to test these experimental features and report any findings in the KeyboardKit issue tracker.

โœจ Features

  • AutocompleteContext has a new isAutoIgnoreEnabled property.
  • KeyboardAction.StandardHandler has many more functions for more granular control.
  • KeyboardAction.StandardHandler can now autocomplete ignore words when pressing backspace.
  • UrlOpener is a new protocol with a new default way to open a URL that also works in iOS 18.

๐Ÿ’ก Adjustments

  • KeyboardAction.url will once again render as full gesture views.
  • KeyboardContext.textInputProxy is now a regular UITextDocumentProxy.
  • KeyboardInputViewController.textInputProxy is now a regular UITextDocumentProxy.

๐Ÿ‘‘ KeyboardKit Pro

  • Dictation+ProKeyboardService now logs when the App Group configuration seems wrong.
  • Dictation+ProKeyboardService now lets you provide a OpenURLAction in the main app.
  • KeyboardHostApplicationProvider has a new hostApplicationBundleIdIsKnown property.
  • View+Dictation now lets provide a OpenURLAction to use to return to the previous app.

๐Ÿ› Bug fixes

  • Dictation.ProKeyboardService now corrently returns to any known host app.
  • Dictation.ProKeyboardService has now sets the dictation locale more reliably.
  • Dictation.ProKeyboardService has now handle background thread state updates better.

๐Ÿ—‘๏ธ Deprecations

  • TextInputProxy is no longer needed and has been deprecated.
KeyboardKit -

Published by danielsaidi about 1 month ago

This version fixes things that break in Xcode 16 and iOS 18.

First of all, it makes multi-gesture buttons work in scroll views, when building from Xcode 16 and running on iOS 18. This is required for the KeyboardKit Pro emoji keyboard to work.

Second, this version makes .url keyboard actions render as SwiftUI Links, since iOS 18 can no longer open URLs using the selector-based approach.

โœจ Features

  • GestureButton is a new inline dependency.
  • Image has a new .keyboardUrl extension.

๐Ÿ’ก Adjustments

  • GestureButton is used for all buttons instead of the deprecated one.
  • KeyboardAction.url will by default use the new .keyboardUrl image.
  • KeyboardAction.url will by default render as a plain SwiftUI Link.

๐Ÿ› Bug fixes

  • Dictation.DisabledKeyboardService now resets its context on the main queue, which silences a background thread warning.

๐Ÿ—‘๏ธ Deprecations

  • Gestures.GestureButton and some related types have been deprecated.
KeyboardKit -

Published by danielsaidi about 1 month ago

This version adjusts Pro licenses.

KeyboardKit -

Published by danielsaidi about 1 month ago

๐Ÿ› Bug fixes

  • This patch fixes a KeyboardAppView bug that caused the locale to be strictly set to the first locale in the license, which did reset any manual changes.
KeyboardKit -

Published by danielsaidi about 1 month ago

This version adjusts Pro licenses.

KeyboardKit -

Published by danielsaidi about 2 months ago

This version fixes a keyboard button gesture bug, where accidentally touching a button when e.g. swiping a scroll view in the toolbar (common for many keyboards that adds actions to the toolbar) causes SwiftUI to not submit a gesture ended event.

๐Ÿ› Bug fixes

  • Gestures.GestureButton will now automatically cancel its pressed state if it hasn't received a second gesture event after a certain delay. While this doesn't fix the bug, it will make the button restore itself whenever it happens.
KeyboardKit -

Published by danielsaidi about 2 months ago

This version fixes a few inconsistencies and bugs.

๐Ÿ’ก Adjustments

  • Autocomplete.ToolbarStyle adjusts the minimum height from 50 to 48 to align closer with the native keyboards, while still leaving room for the standard callouts.

๐Ÿ‘‘ KeyboardKit Pro

  • Autocomplete.LocalService now correctly regards lexicon suggestions as pure complementary, since they (as they should) ignore the current casing, and therefore can mess up capitalization when typing.
KeyboardKit -

Published by danielsaidi about 2 months ago

This version continues to rename types to make things more consistent in the 9.0 release. This means that are currently many deprecated names (which may be confusing), but it's all in service for a clean 9.0.

This version also adds a new KeyboardApp type that can be used to define all information for your app. This makes it easy to keep all app-specific information in one place, set up the main app target, etc.

This version also adds a new KeyboardAppView view that can automatically set up main app to use App Group synced settings, register your KeyboardKit Pro license (if any), etc. This removes a lot of manual work.

This version deprecates the recently added settings types, and replaces them with adding persistency to the various context properties instead. This avoids having to keep the contexts in sync with the settings.

This version adds support for Emoji 15.1, which adds a bunch of new emojis, and also adds memory optimized emoji keyboard styles, which make the emoji keyboard consume a LOT less memory, by rendering lower resolution grid items.

This version also tweaks the emoji keyboard configuration for all device types, to make the emoji keyboard look a lot closer to the native emoji keyboard on all device types, including 13" iPads, in both portrait and landscape.

KeyboardKit Pro adds new settings screens, like KeyboardApp.SettingsScreen and KeyboardApp.LocaleScreen, which makes it a lot easier than before to add keyboard settings to the main app target, as well as to the keyboard.

๐Ÿ’ฅ Breaking changes

This version has one breaking change. Due to how settings are now handled, the KeyboardSettings.store no longer accept optional values. You can only replace this store with another valid store, and have a new isStoreSynced property to see if you've successfully set up an app group-synced store.

โœจ Features

  • AutocompleteContext has new settings that replace AutocompleteSettings.
  • Autocomplete.Suggestion has a new type property which replaces the bools.
  • Autocomplete.Suggestion has a new source property to indicate its source.
  • Bundle has an isExtension to help you check if code runs in an extension.
  • DictationContext has new setting values that replace DictationSettings.
  • FeedbackContext has new settings that replace the FeedbackSettings type.
  • FeedbackService is a new service type that can trigger audio and haptic feedback.
  • Image has many new utility functions to make it easier to resolve keyboard icons.
  • Keyboard.BottomRow is no longer a Pro feature, but is available in the core library.
  • Keyboard.Services has a new frequentEmojiProvider and removes the static instance.
  • Keyboard.StorageValue is a new type that is used to persist codable types in storage.
  • KeyboardAction.StandardHandler uses an emoji provider instead of an injected handler.
  • KeyboardAction.StandardHandler has new functions to trigger audio and haptic feedback.
  • KeyboardApp is a new type that can be used to setup information for your keyboard app.
  • KeyboardAppView is a new view that can be used to setup your main keyboard app target.
  • KeyboardContext has a computed returnKeyType property, which can also be overridden.
  • KeyboardContext has new settings that replace the KeyboardSettings settings properties.
  • KeyboardContext has a new returnKeyTypeOverride that can override which return key to use.
  • KeyboardContext has a new addedLocales settings that can be used to "activate" certain locales.
  • KeyboardContext now persists the keyboardLocaleIdentifier and restores the locale on next launch.
  • KeyboardContext now has even more KeyboardLocale-based versions of some Locale-based functions.
  • KeyboardLocale has new ListItem & ListDragHandle views to simplify building locale-based lists.
  • KeyboardLocale.ContextMenu now supports providing custom locales instead of using the context ones.
  • KeyboardLocaleInfo has new matches(query:in:) functionality to match locales on free-text queries.
  • KeyboardSettings has a new setup function for App Group-syncing and a new isAppGroupSynced property.

๐Ÿ˜€ Emojis

  • EmojiCategory has improved support for persistency.
  • EmojiKeyboard now renders better on 13" iPad devices.
  • EmojiKeyboard now displays a dismiss button on iPad devices.
  • EmojiKeyboard now adds an extra row if an input toolbar is used.
  • EmojiKeyboardStyle has memory .optimized emoji keyboard styles.
  • EmojiKeyboardStyle now uses the new .optimized styles by default.
  • EmojiKeyboardStyle has been adjusted to conform to new capabilities.
  • EmojiVersion supports Emoji 15.1 and adds new emojis to the keyboard.

๐Ÿ’ก Adjustments

  • AutocompleteContext now stores many properties.
  • Feedback.HapticConfiguration.disabled now triggers .longPressOnSpace.
  • FeedbackContext has changed the way it calculates its feedback configs.
  • Keyboard.Services layoutService will now refresh the keyboard when set.
  • KeyboardLayout.Configuration uses a marginally taller input toolbar height.
  • KeyboardInputViewController now checks if self is nil when setting up a view.
  • KeyboardView now renders better on 13" iPad devices, due to more size tolerance.
  • SystemKeyboard will by default show a numeric input toolbar on large iPad devices.

๐Ÿ‘‘ KeyboardKit Pro

  • Autocomplete.LocalService now applies a source to its suggestions.
  • Autocomplete.LocalService now is now less aggressive with autocorrect.
  • Autocomplete.LocalService now lets you override next character prediction.
  • Autocomplete.RemoteService can now also perform next character prediction.
  • KeyboardApp.HomeScreen can now be configured to display a keyboard section.
  • KeyboardApp.HomeScreen has several new visibility and style configurations.
  • KeyboardApp.SettingsScreen is a new screen view that can manage various settings.

๐Ÿ› Bug fixes

  • Autocomplete.LocalProvider is now a typealias.
  • Autocomplete.RemoteProvider is now a typealias.
  • CGSize.isScreenSize now uses 50 points tolerance.
  • View+KeyboardButton explicitly applies an interactable background color.

๐Ÿ—‘๏ธ Deprecations & Renamings

  • Most service types are renamed to *Service for a more consistent naming.

  • All *Settings types are deprecated since settings have moved to contexts.

  • SystemKeyboard has been renamed to the shorter KeyboardView.

  • SystemKeyboardBottomRow has been renamed to Keyboard.BottomRow.

  • SystemKeyboardButtonPreview has been renamed to Keyboard.ButtonPreview.

  • EmojiProvider has been deprecated and is no more used by KeyboardKit.

  • Feedback.HapticConfiguration.minimal has been replaced by .disabled.

  • Gestures.KeyboardGesture has been moved & renamed to Keyboard.Gesture.

  • Keyboard.SettingsLink has been deprecated, since a Link works as well.

  • Keyboard.State's dictationConfig is now defined within the dictationContext.

  • KeyboardAppearanceViewModifier has been deprecated, since it didn't behave well.

  • KeyboardSettings settings properties have been deprecated and moved to the context.

KeyboardKit -

Published by danielsaidi about 2 months ago

New from RC1

This version fixes some bugs that were found in RC1 (#769), and makes it easier to set up App Store-synced settings. It also adds a new KeyboardApp struct that can specify all important information about your app, as well as a KeyboardAppView that makes it a lot easier to set up the main app, register your KeyboardKit Pro license, etc.

About the 8.8 version

This version continues to rename types to make things more consistent in the 9.0 release. This means that are currently many deprecated names (which may be confusing), but it's all in service for a clean 9.0.

This version also adds a new KeyboardApp type that can be used to define all information for your app. This makes it easy to keep all app-specific information in one place, set up the main app target, etc.

This version also adds a new KeyboardAppView view that can automatically set up main app to use App Group synced settings, register your KeyboardKit Pro license (if any), etc. This removes a lot of manual work.

This version deprecates the recently added settings types, and replaces them with adding persistency to the various context properties instead. This avoids having to keep the contexts in sync with the settings.

This version adds support for Emoji 15.1, which adds a bunch of new emojis, and also adds memory optimized emoji keyboard styles, which make the emoji keyboard consume a LOT less memory, by rendering lower resolution grid items.

This version also tweaks the emoji keyboard configuration for all device types, to make the emoji keyboard look a lot closer to the native emoji keyboard on all device types, including 13" iPads, in both portrait and landscape.

KeyboardKit Pro adds new settings screens, like KeyboardApp.SettingsScreen and KeyboardApp.LocaleScreen, which makes it a lot easier than before to add keyboard settings to the main app target, as well as to the keyboard.

๐Ÿ’ฅ Breaking changes

This version has one breaking change. Due to how settings are now handled, the KeyboardSettings.store no longer accept optional values. You can only replace this store with another valid store, and have a new isStoreSynced property to see if you've successfully set up an app group-synced store.

โœจ Features

  • AutocompleteContext has new settings that replace AutocompleteSettings.
  • Autocomplete.Suggestion has a new type property which replaces the bools.
  • Autocomplete.Suggestion has a new source property to indicate its source.
  • Bundle has an isExtension to help you check if code runs in an extension.
  • DictationContext has new setting values that replace DictationSettings.
  • FeedbackContext has new settings that replace the FeedbackSettings type.
  • FeedbackService is a new service type that can trigger audio and haptic feedback.
  • Image has many new utility functions to make it easier to resolve keyboard icons.
  • Keyboard.BottomRow is no longer a Pro feature, but is available in the core library.
  • Keyboard.Services has a new frequentEmojiProvider and removes the static instance.
  • Keyboard.StorageValue is a new type that is used to persist codable types in storage.
  • KeyboardAction.StandardHandler uses an emoji provider instead of an injected handler.
  • KeyboardAction.StandardHandler has new functions to trigger audio and haptic feedback.
  • KeyboardApp is a new type that can be used to setup information for your keyboard app.
  • KeyboardAppView is a new view that can be used to setup your main keyboard app target.
  • KeyboardContext has a computed returnKeyType property, which can also be overridden.
  • KeyboardContext has new settings that replace the KeyboardSettings settings properties.
  • KeyboardContext has a new returnKeyTypeOverride that can override which return key to use.
  • KeyboardContext has a new addedLocales settings that can be used to "activate" certain locales.
  • KeyboardContext now persists the keyboardLocaleIdentifier and restores the locale on next launch.
  • KeyboardContext now has even more KeyboardLocale-based versions of some Locale-based functions.
  • KeyboardLocale has new ListItem & ListDragHandle views to simplify building locale-based lists.
  • KeyboardLocale.ContextMenu now supports providing custom locales instead of using the context ones.
  • KeyboardLocaleInfo has new matches(query:in:) functionality to match locales on free-text queries.
  • KeyboardSettings has a new setup function for App Group-syncing and a new isAppGroupSynced property.

๐Ÿ˜€ Emojis

  • EmojiKeyboard now renders better on 13" iPad devices.
  • EmojiKeyboard now displays a dismiss button on iPad devices.
  • EmojiKeyboard now adds an extra row if an input toolbar is used.
  • EmojiKeyboardStyle has memory .optimized emoji keyboard styles.
  • EmojiKeyboardStyle now uses the new .optimized styles by default.
  • EmojiKeyboardStyle has been adjusted to conform to new capabilities.
  • EmojiVersion supports Emoji 15.1 and adds new emojis to the keyboard.

๐Ÿ’ก Adjustments

  • AutocompleteContext now stores many properties.
  • Feedback.HapticConfiguration.disabled now triggers .longPressOnSpace.
  • FeedbackContext has changed the way it calculates its feedback configs.
  • Keyboard.Services layoutService will now refresh the keyboard when set.
  • KeyboardLayout.Configuration uses a marginally taller input toolbar height.
  • KeyboardInputViewController now checks if self is nil when setting up a view.
  • KeyboardView now renders better on 13" iPad devices, due to more size tolerance.
  • SystemKeyboard will by default show a numeric input toolbar on large iPad devices.

๐Ÿ‘‘ KeyboardKit Pro

  • Autocomplete.LocalService now applies a source to its suggestions.
  • Autocomplete.LocalService now is now less aggressive with autocorrect.
  • Autocomplete.LocalService now lets you override next character prediction.
  • Autocomplete.RemoteService can now also perform next character prediction.
  • KeyboardApp.HomeScreen can now be configured to display a keyboard section.
  • KeyboardApp.HomeScreen has several new visibility and style configurations.
  • KeyboardApp.SettingsScreen is a new screen view that can manage various settings.

๐Ÿ› Bug fixes

  • Autocomplete.LocalProvider is now a typealias.
  • Autocomplete.RemoteProvider is now a typealias.
  • CGSize.isScreenSize now uses 50 points tolerance.
  • View+KeyboardButton explicitly applies an interactable background color.

๐Ÿ—‘๏ธ Deprecations & Renamings

  • Most service types are renamed to *Service for a more consistent naming.

  • All *Settings types are deprecated since settings have moved to contexts.

  • SystemKeyboard has been renamed to the shorter KeyboardView.

  • SystemKeyboardBottomRow has been renamed to Keyboard.BottomRow.

  • SystemKeyboardButtonPreview has been renamed to Keyboard.ButtonPreview.

  • Feedback.HapticConfiguration.minimal has been replaced by .disabled.

  • Gestures.KeyboardGesture has been moved & renamed to Keyboard.Gesture.

  • Keyboard.SettingsLink has been deprecated, since a Link works as well.

  • Keyboard.State's dictationConfig is now defined within the dictationContext.

  • KeyboardAppearanceViewModifier has been deprecated, since it didn't behave well.

  • KeyboardSettings settings properties have been deprecated and moved to the context.

KeyboardKit -

Published by danielsaidi 2 months ago

โ€ผ๏ธ Important information

KeyboardKit 8.8 has a lot of deprecations, since the structure is being changed and types being renamed to make the upcoming 9.0 cleaner.

These changes don't affect KeyboardActionHandler (which is a better name than *service) and KeyboardStyleProvider which will most probably be removed in 9.0 and replaced with view modifiers.

KeyboardKit 9 is planned to be released soon after the public release of iOS 18 and all corresponding OS versions. It will bump the deployment target to iOS 15.

8.8

This version continues to rename types to make things better in the upcoming 9.0 release. This means that there are currently many deprecated names (which may be confusing), but it's all in service for a clean 9.0.

This version deprecates the recently added settings types, and replaces them with adding persistency to the various context properties instead. This avoids having to keep the contexts in sync with the settings.

To avoid compile-time warnings, these deprecated settings are currently only soft deprecated with a code comment. They will however be completely removed in KeyboardKit 9.0, so make sure to start using the contexts instead.

This version adds support for Emoji 15.1, which adds a bunch of new emojis, and also adds memory optimized emoji keyboard styles, which make the emoji keyboard consume a LOT less memory, by rendering lower resolution grid items.

This version also tweaks the emoji keyboard configuration for all device types, to make the emoji keyboard look a lot closer to the native emoji keyboard on all device types, including larger iPads in both portrait and landscape.

KeyboardKit Pro adds new settings screens, like KeyboardApp.SettingsScreen and KeyboardApp.LanguageSettingsScreen, which makes it a lot easier than before to add keyboard settings to the main app target, as well as to the keyboard.

โœจ Features

  • AutocompleteContext has new settings that replace AutocompleteSettings.
  • Autocomplete.Suggestion has a new type property which replaces the bools.
  • Autocomplete.Suggestion has a new source property to indicate its source.
  • Bundle has an isExtension to help you check if code runs in an extension.
  • DictationContext has new setting values that replace DictationSettings.
  • FeedbackContext has new settings that replace the FeedbackSettings type.
  • FeedbackService is a new service type that can trigger audio and haptic feedback.
  • Image has many new utility functions to make it easier to resolve keyboard icons.
  • Keyboard.BottomRow is no longer a Pro feature, but is available in the core library.
  • Keyboard.Services has a new frequentEmojiProvider and removes the static instance.
  • Keyboard.StorageValue is a new type that is used to persist codable types in storage.
  • KeyboardAction.StandardHandler uses an emoji provider instead of an injected handler.
  • KeyboardAction.StandardHandler has new functions to trigger audio and haptic feedback.
  • KeyboardContext has a computed returnKeyType property, which can also be overridden.
  • KeyboardContext has new settings that replace the KeyboardSettings settings properties.
  • KeyboardContext has a new returnKeyTypeOverride that can override which return key to use.
  • KeyboardContext has a new addedLocales settings that can be used to "activate" certain locales.
  • KeyboardContext now persists the keyboardLocaleIdentifier and restores the locale on next launch.
  • KeyboardContext now has even more KeyboardLocale-based versions of some Locale-based functions.
  • KeyboardLocale has new ListItem & ListDragHandle views to simplify building locale-based lists.
  • KeyboardLocale.ContextMenu now supports providing custom locales instead of using the context ones.
  • KeyboardLocaleInfo has new matches(query:in:) functionality to match locales on free-text queries.

๐Ÿ˜€ Emojis

  • EmojiKeyboard now renders better on 13" iPad devices.
  • EmojiKeyboard now displays a dismiss button on iPad devices.
  • EmojiKeyboard now adds an extra row if an input toolbar is used.
  • EmojiKeyboardStyle has memory .optimized emoji keyboard styles.
  • EmojiKeyboardStyle now uses the new .optimized styles by default.
  • EmojiKeyboardStyle has been adjusted to conform to new capabilities.
  • EmojiVersion supports Emoji 15.1 and adds new emojis to the keyboard.

๐Ÿ’ก Adjustments

  • AutocompleteContext now stores many properties.
  • Feedback.HapticConfiguration.disabled now triggers .longPressOnSpace.
  • FeedbackContext has changed the way it calculates its feedback configs.
  • Keyboard.Services layoutService will now refresh the keyboard when set.
  • KeyboardLayout.Configuration uses a marginally taller input toolbar height.
  • KeyboardInputViewController now checks if self is nil when setting up a view.
  • KeyboardView now renders better on 13" iPad devices, due to more size tolerance.
  • SystemKeyboard will by default show a numeric input toolbar on large iPad devices.

๐Ÿ‘‘ KeyboardKit Pro

  • Autocomplete.LocalService now applies a source to its suggestions.
  • Autocomplete.LocalService now is now less aggressive with autocorrect.
  • Autocomplete.LocalService now lets you override next character prediction.
  • Autocomplete.RemoteService can now also perform next character prediction.
  • KeyboardApp.HomeScreen can now be configured to display a keyboard section.
  • KeyboardApp.HomeScreen has several new visibility and style configurations.
  • KeyboardApp.SettingsScreen is a new screen view that can manage various settings.

๐Ÿ› Bug fixes

  • Autocomplete.LocalProvider is now a typealias.
  • Autocomplete.RemoteProvider is now a typealias.
  • CGSize.isScreenSize now uses 50 points tolerance.
  • View+KeyboardButton explicitly applies an interactable background color.

๐Ÿ—‘๏ธ Deprecations & Renamings

  • Most service types are renamed to *Service for a more consistent naming.
  • All *Settings types are deprecated since settings have moved to contexts.
  • SystemKeyboard has been renamed to the shorter KeyboardView.
  • SystemKeyboardBottomRow has been renamed to Keyboard.BottomRow.
  • SystemKeyboardButtonPreview has been renamed to Keyboard.ButtonPreview.
  • Feedback.HapticConfiguration.minimal has been replaced by .disabled.
  • Gestures.KeyboardGesture has been moved & renamed to Keyboard.Gesture.
  • Keyboard.SettingsLink has been deprecated, since a Link works as well.
  • Keyboard.State's dictationConfig is now defined within the dictationContext.
  • KeyboardAppearanceViewModifier has been deprecated, since it didn't behave well.
  • KeyboardSettings settings properties have been deprecated and moved to the context.
KeyboardKit -

Published by danielsaidi 2 months ago

This version updates Pro licenses.

KeyboardKit -

Published by danielsaidi 3 months ago

This patch defers some heavy memory allocations that is unintentionally caused by the emoji keyboard, by only loading the keyboard when it's requested.

While the emoji keyboard may still cause memory pressure in keyboard extensions that load other heavy components into memory, it will not affect these keyboards on load.

The memory issues are described in a GitHub issue, and seems to be caused by SwiftUI. You can reproduce it by just adding the emoji keyboard to the extension and scroll through the categories.

This memory issue is a top priority, that must be fixed in the upcoming 8.8.

โœจ Features

  • Callouts.DisabledActionProvider is a new, disabled action provider.
  • KeyboardLayout.DisabledProvider is a new, disabled layout provider.

๐ŸŒ Localization

  • Hebrew now uses a newline arrow instead of text.

๐Ÿ’ก Adjustments

  • SystemKeyboard only loads the emoji keyboard when the keyboard type is .emojis.

๐Ÿ› Bug fixes

  • Keyboard.Services now properly applies an inverse offset for RTL locales.
KeyboardKit -

Published by danielsaidi 4 months ago

This version adds more binary KeyboardKit Pro licenses.

KeyboardKit -

Published by danielsaidi 4 months ago

This version improves the overall autocomplete behavior.

The local autocomplete service will now return proper unknown statuses and suggest any lexicon matches as autocorrections. The standard action handler will automatically ask the autocomplete provider to learn any applied unknown suggestions, if isAutoLearnEnabled is true.

This way to learn unknown suggestions will hopefully solve many frustrations involved with autocomplete, where the provider will behave better over time. Please provide feedback if these adjustments don't behave as expected.

The local autocomplete service can also perform next character prediction, by providing it with the typed text and a list of suggestions. This will be merged with the autocomplete operation in version 9.0.

The autocomplete context also has new ways of registering your own custom autocorrections for any locale, in case you find the default behavior to be lacking in some areas.

Furthermore, this version adds new persistent settings types, adds a KeyboardLocaleInfo protocol to make KeyboardLocale and Locale share many properties, and makes it possible to define which text to use when ending the current sentence.

๐Ÿšจ Important Information

  • AutocompleteService and all implementations have been renamed to use the new Service name.
  • Autocomplete.LocalService no longer caps suggestions by default. That responsibility is moved to the context.
  • Autocomplete.ToolbarItem no longer adds quotations around unknown suggestions. That responsibility is moved to AutocompleteService.
  • KeyboardInputViewController now checks more things before performing autocomplete, for instance the keyboard context prefersAutocomplete.
  • KeyboardStyleProvider and Keyboard.ButtonStyle now supports native Fonts. This may cause some breaking changes that should be easy to fix.

๐Ÿ†• New Settings Types

  • AutocompleteSettings is a new observable settings type.
  • DictationSettings is a new observable settings type.
  • FeedbackSettings is a new observable settings type.
  • Keyboard.Settings is a new settings wrapper.

โœจ Features

  • Autocomplete.Suggestion has new functions.
  • Autocomplete.TextReplacementDictionary is new type.
  • AutocompleteContext has a new autocorrectDictionary value.
  • AutocompleteContext has a new isAutoLearnEnabled property.
  • AutocompleteContext has a new suggestionDisplayCount property.
  • AutocompleteContext has a new suggestionsFromService property.
  • AutocompleteService has a new nextCharacterPredictions function.
  • AutocompleteService has new ignoreWords(_:) and suggestion functions.
  • KeyboardBehavior and its implementations have a new endSentenceText property.
  • KeyboardAction.StandardProvider can now automatically learn unknown suggestions.
  • KeyboardContext has a new syncKeyboardType(with:) to sync type with the proxy.
  • KeyboardController has a new endSentence(withText:) function to end sentences.
  • KeyboardInputViewController has a new settings property for setting instances.
  • KeyboardInputViewController has a new viewWillSetupInitialKeyboardType method.
  • KeyboardLocaleInfo is a new protocol that is shared by KeyboardLocale and Locale.
  • KeyboardSettings has new ways to register a custom store and settings key prefix.
  • KeyboardStyleProvioder has new ways to register a custom store and settings key prefix.
  • UserDefaults has a new .keyboardSettings value that can be used to persist data.

๐Ÿ’ก Adjustments

  • Autocomplete.Toolbar no longer needs an injected locale.
  • Autocomplete.ToolbarItem no longer needs an injected locale.
  • Autocomplete.ToolbarItem no longer adds quotations to unknown suggestions.
  • KeyboardContex prefersAutocomplete is now computed and no longer synced.
  • KeyboardInputViewController now checks KeyboardContext.prefersAutocomplete.
  • KeyboardLayout.iPhoneProvider now handles more keyboard types in a better way.
  • KeyboardSettings have been converted from a namespace to being a part of Keyboard.
  • KeyboardStyle.StandardProvider now sets a smaller font size for the .text action type.

๐Ÿ‘‘ KeyboardKit Pro

  • Autocomplete.LocalService no longer takes a maxCount parameter.
  • Autocomplete.LocalService will now return lexicon matches as autocorrections.
  • Autocomplete.LocalService will now return proper unknown state for suggestions.
  • Dictation.ProKeyboardService uses an action handler to open app and navigate back.
  • Emoji.KeyboardMenu will now trigger haptic feedback when tapping an emoji category.
  • KeyboardHostApplication now implements Identifiable and has a new name property.
  • KeyboardHostApplication now defines even more applications and has a url property.
  • KeyboardHostApplicationProvider is a new protocol that is implemented by some types.

๐Ÿ› Bug fixes

  • KeyboardAction.text now properly renders its texts.
  • KeyboardInputViewController now sets the initial keyboard type when the native type is ready.
  • KeyboardLayout.iPhoneProvider no longer inserts two . keys for email keyboards with a go key.
  • UITextDocumentProxy now proceeds inserting a word replacement even if there's no current word.

๐Ÿ—‘๏ธ Deprecations

  • Keyboard.ReturnKeyType prefersAutocomplete has been deprecated, since the keyboard type should determine this.
KeyboardKit -

Published by danielsaidi 4 months ago

This version improves the overall autocomplete behavior.

The local autocomplete provider will now return proper unknown statuses and suggest any lexicon matches as autocorrections. The standard action handler will automatically ask the autocomplete provider to learn any applied unknown suggestions, if isAutoLearnEnabled is true.

This way to learn unknown suggestions will hopefully solve many frustrations involved with autocomplete, where the provider will behave better over time. Please provide feedback if these adjustments don't behave as expected.

The autocomplete context also has new ways of registering your own custom autocorrections for any locale, in case you find the default behavior to be lacking in some areas.

Furthermore, this version adds brand new persistent settings types, adds a KeyboardLocaleInfo protocol that makes KeyboardLocale and Locale share many properties, and makes it possible to define which text to use when ending the current sentence.

๐Ÿšจ Important Information

  • Autocomplete.LocalProvider no longer caps suggestions by default. That responsibility is moved to Autocomplete.Toolbar.
  • Autocomplete.ToolbarItem no longer adds quotations around unknown suggestions. That responsibility is moved to AutocompleteProvider.
  • KeyboardInputViewController now checks more things before performing autocomplete, for instance the keyboard context prefersAutocomplete.
  • KeyboardStyleProvider and Keyboard.ButtonStyle now supports native Fonts. This may cause some breaking changes that should be easy to fix.

๐Ÿ†• New Settings Types

  • AutocompleteSettings is a new observable settings type.
  • DictationSettings is a new observable settings type.
  • FeedbackSettings is a new observable settings type.
  • Keyboard.Settings is a new settings wrapper.

โœจ Features

  • Autocomplete.Suggestion has new functions.
  • Autocomplete.TextReplacementDictionary is new type.
  • AutocompleteContext has a new autocorrectDictionary value.
  • AutocompleteContext has a new isAutoLearnEnabled property.
  • AutocompleteContext has a new preferredSuggestionCount property.
  • AutocompleteContext has a new suggestionsToDisplay property.
  • AutocompleteProvider has new ignoreWords(_:) and suggestion functions.
  • KeyboardBehavior and its implementations have a new endSentenceText property.
  • KeyboardAction.StandardProvider can now automatically learn unknown suggestions.
  • KeyboardContext has a new syncKeyboardType(with:) to sync type with the proxy.
  • KeyboardController has a new endSentence(withText:) function to end sentences.
  • KeyboardInputViewController has a new settings property for setting instances.
  • KeyboardInputViewController has a new viewWillSetupInitialKeyboardType method.
  • KeyboardLocaleInfo is a new protocol that is shared by KeyboardLocale and Locale.
  • KeyboardSettings has new ways to register a custom store and settings key prefix.
  • KeyboardStyleProvioder has new ways to register a custom store and settings key prefix.
  • UserDefaults has a new .keyboardSettings value that can be used to persist data.

๐Ÿ’ก Adjustments

  • Autocomplete.Toolbar no longer needs an injected locale.
  • Autocomplete.ToolbarItem no longer needs an injected locale.
  • Autocomplete.ToolbarItem no longer adds quotations to unknown suggestions.
  • KeyboardContex prefersAutocomplete is now computed and no longer synced.
  • KeyboardInputViewController now checks KeyboardContext.prefersAutocomplete.
  • KeyboardLayout.iPhoneProvider now handles more keyboard types in a better way.
  • KeyboardSettings have been converted from a namespace to being a part of Keyboard.
  • KeyboardStyle.StandardProvider now sets a smaller font size for the .text action type.

๐Ÿ‘‘ KeyboardKit Pro

  • Autocomplete.LocalProvider no longer takes a maxCount parameter.
  • Autocomplete.LocalProvider will now return lexicon matches as autocorrections.
  • Autocomplete.LocalProvider will now return proper unknown state for suggestions.
  • Dictation.ProKeyboardService uses an action handler to open app and navigate back.
  • Emoji.KeyboardMenu will now trigger haptic feedback when tapping an emoji category.
  • KeyboardHostApplication now implements Identifiable and has a new name property.
  • KeyboardHostApplication now defines even more applications and has a url property.
  • KeyboardHostApplicationProvider is a new protocol that is implemented by some types.

๐Ÿ› Bug fixes

  • KeyboardAction.text now properly renders its texts.
  • KeyboardInputViewController now sets the initial keyboard type when the native type is ready.
  • KeyboardLayout.iPhoneProvider no longer inserts two . keys for email keyboards with a go key.
  • UITextDocumentProxy now proceeds inserting a word replacement even if there's no current word.

๐Ÿ—‘๏ธ Deprecations

  • Keyboard.ReturnKeyType prefersAutocomplete has been deprecated, since the keyboard type should determine this.
KeyboardKit -

Published by danielsaidi 4 months ago

This version improves the overall autocomplete behavior.

The local autocomplete provider now returns proper unknown statuses for the leading quotation suggestion. The standard action handler will automatically ask the autocomplete provider to learn applied unknown suggestions, if isAutoLearnEnabled is true.

This way to learn unknown suggestions will hopefully solve many frustrations involved with autocomplete, where the provider will behave better over time. Please provide feedback if these adjustments don't behave as expected.

Furthermore, this version adds brand new persistent settings types, adds a KeyboardLocaleInfo protocol that makes KeyboardLocale and Locale share many properties, and makes it possible to define which text to use when ending the current sentence.

๐Ÿšจ Important Information

  • Autocomplete.LocalProvider no longer caps suggestions to the preferred count. That responsibility has been moved to the Autocomplete.Toolbar.
  • Autocomplete.ToolbarItem no longer adds quotations around unknown suggestions. That responsibility has been moved to the AutocompleteProvider.
  • KeyboardInputViewController will check more configurations before performing autocomplete. The keyboard context's prefersAutocomplete will now also be used to make this decision.
  • KeyboardStyleProvider and Keyboard.ButtonStyle now supports native Fonts, to give you more design freedom. This may result in breaking changes, but these should be easy to fix.

๐Ÿ†• New Settings Types

  • AutocompleteSettings is a new observable settings type.
  • DictationSettings is a new observable settings type.
  • FeedbackSettings is a new observable settings type.
  • Keyboard.Settings is a new settings type container.

โœจ Features

  • Autocomplete.Suggestion has new functions.
  • Autocomplete.TextReplacementDictionary is new type.
  • AutocompleteContext has a new autocorrectDictionary value.
  • AutocompleteContext has a new isAutoLearnEnabled property.
  • AutocompleteContext has a new preferredSuggestionCount property.
  • AutocompleteContext has a new suggestionsToDisplay property.
  • AutocompleteProvider has new ignoreWords(_:) and suggestion functions.
  • KeyboardBehavior and its implementations have a new endSentenceText property.
  • KeyboardAction.StandardProvider can now automatically learn unknown suggestions.
  • KeyboardContext has a new syncKeyboardType(with:) to sync type with the proxy.
  • KeyboardController has a new endSentence(withText:) function to end sentences.
  • KeyboardInputViewController has a new settings property for setting instances.
  • KeyboardInputViewController has a new viewWillSetupInitialKeyboardType method.
  • KeyboardLocaleInfo is a new protocol that is shared by KeyboardLocale and Locale.
  • KeyboardSettings has new ways to register a custom store and settings key prefix.
  • KeyboardStyleProvioder has new ways to register a custom store and settings key prefix.
  • UserDefaults has a new .keyboardSettings value that can be used to persist data.

๐Ÿ’ก Adjustments

  • Autocomplete.ToolbarItem no longer adds quotations to unknown suggestions.
  • KeyboardContex prefersAutocomplete is now computed and no longer synced.
  • KeyboardInputViewController now checks KeyboardContext.prefersAutocomplete.
  • KeyboardLayout.iPhoneProvider now handles more keyboard types in a better way.
  • KeyboardSettings have been converted from a namespace to being a part of Keyboard.
  • KeyboardStyle.StandardProvider now sets a smaller font size for the .text action type.

๐Ÿ‘‘ KeyboardKit Pro

  • Autocomplete.LocalProvider no longer takes a maxCount parameter.
  • Autocomplete.LocalProvider will now return proper unknown state for suggestions.
  • Dictation.ProKeyboardService uses an action handler to open app and navigate back.
  • Emoji.KeyboardMenu will now trigger haptic feedback when tapping an emoji category.
  • KeyboardHostApplication now implements Identifiable and has a new name property.
  • KeyboardHostApplication now defines even more applications and has a url property.
  • KeyboardHostApplicationProvider is a new protocol that is implemented by some types.

๐Ÿ› Bug fixes

  • KeyboardAction.text now properly renders its texts.
  • KeyboardInputViewController now sets the initial keyboard type when the native type is ready.
  • KeyboardLayout.iPhoneProvider no longer inserts two . keys for email keyboards with a go key.
  • UITextDocumentProxy now proceeds inserting a word replacement even if there's no current word.

๐Ÿ—‘๏ธ Deprecations

  • Keyboard.ReturnKeyType prefersAutocomplete has been deprecated, since the keyboard type should determine this.
KeyboardKit -

Published by danielsaidi 5 months ago

KeyboardKit 8.7 improves the overall autocomplete behavior, adds a brand new settings concept and has many other features & fixes.

The local autocomplete provider now returns proper unknown statuses for the leading quotation suggestion. The standard action handler will automatically ask the autocomplete provider to learn applied unknown suggestions, if isAutoLearnEnabled is true.

This way to learn unknown suggestions will hopefully solve many frustrations involved with autocomplete, where the provider will behave better over time. Please provide feedback if these adjustments don't behave properly, or as expected.

Another change is that the KeyboardInputViewController will check more configurations before performing autocomplete. The keyboard context's prefersAutocomplete property will now also be used to make this decision.

Another change worth knowing, is that the Autocomplete.ToolbarItem view no longer adds quotations around unknown suggestions. That responsibility has been moved to the autocomplete provider. The view will just show the titles it receives.

Furthermore, this version adds brand new persistent settings types, adds a KeyboardLocaleInfo protocol that makes KeyboardLocale and Locale share many properties, and makes it possible to define which text to use when ending the current sentence.

๐Ÿšจ Important Information

KeyboardStyleProvider and Keyboard.ButtonStyle now supports defining native Fonts, to give you more freedom when designing custom keyboards. This may result in breaking changes, if you use have overridden the style provider font or access the style font, but these should be easy to fix.

๐Ÿ†• New Settings Types

  • AutocompleteSettings is a new observable settings type.
  • DictationSettings is a new observable settings type.
  • FeedbackSettings is a new observable settings type.
  • Keyboard.Settings is a new settings type container.

โœจ Features

  • Autocomplete.Suggestion has new functions.
  • Autocomplete.TextReplacementDictionary is new type.
  • AutocompleteContext has a new autocorrectDictionary value.
  • AutocompleteContext has a new isAutoLearnEnabled property.
  • AutocompleteContext has a new preferredSuggestionCount property.
  • AutocompleteProvider has new ignoreWords(_:) and suggestion functions.
  • KeyboardBehavior and its implementations have a new endSentenceText property.
  • KeyboardAction.StandardProvider can now automatically learn unknown suggestions.
  • KeyboardContext has a new syncKeyboardType(with:) to sync type with the proxy.
  • KeyboardController has a new endSentence(withText:) function to end sentences.
  • KeyboardInputViewController has a new settings property for setting instances.
  • KeyboardInputViewController has a new viewWillSetupInitialKeyboardType method.
  • KeyboardLocaleInfo is a new protocol that is shared by KeyboardLocale and Locale.
  • KeyboardSettings has new ways to register a custom store and settings key prefix.
  • KeyboardStyleProvioder has new ways to register a custom store and settings key prefix.
  • UserDefaults has a new .keyboardSettings value that can be used to persist data.

๐Ÿ’ก Adjustments

  • Autocomplete.ToolbarItem no longer adds quotations to unknown suggestions.
  • KeyboardContex prefersAutocomplete is now computed and no longer synced.
  • KeyboardInputViewController now checks KeyboardContext.prefersAutocomplete.
  • KeyboardLayout.iPhoneProvider now handles more keyboard types in a better way.
  • KeyboardSettings have been converted from a namespace to being a part of Keyboard.
  • KeyboardStyle.StandardProvider now sets a smaller font size for the .text action type.

๐Ÿ‘‘ KeyboardKit Pro

  • Autocomplete.LocalProvider will now return proper unknown state for suggestions.
  • Dictation.ProKeyboardService uses an action handler to open app and navigate back.
  • Emoji.KeyboardMenu will now trigger haptic feedback when tapping an emoji category.
  • KeyboardHostApplication now implements Identifiable and has a new name property.
  • KeyboardHostApplication now defines even more applications and has a url property.
  • KeyboardHostApplicationProvider is a new protocol that is implemented by some types.

๐Ÿ› Bug fixes

  • KeyboardAction.text now properly renders its texts.
  • KeyboardInputViewController now sets the initial keyboard type when the native type is ready.
  • KeyboardLayout.iPhoneProvider no longer inserts two . keys for email keyboards with a go key.
  • UITextDocumentProxy now proceeds inserting a word replacement even if there's no current word.

๐Ÿ—‘๏ธ Deprecations

  • Keyboard.ReturnKeyType prefersAutocomplete has been deprecated, since the keyboard type should determine this.
KeyboardKit -

Published by danielsaidi 5 months ago

This version adds support for 5 new locales, support for diacritics, and makes it easier to identify the host application. It also improves many of the localized system keyboards that are provided by Pro.

This version also changes the default autocomplete behavior, by making KeyboardInputViewController only use the pre-cursor part of the current word for autocomplete, which is how the native keyboard behaves.

This version also makes KeyboardKit Pro no longer overwrite custom services that are set before registering a license. This means that you can now apply custom services at any time, without it being overwritten.

This version also reduces load times and memory usage in KeyboardKit Pro, by lazily resolving localized callout action providers and layout providers, and makes all supported locales use the iPad Pro layout.

โœจ Features

  • Keyboard.Accent is a new typealias for diacritics.
  • Keyboard.Diacritic is a new type that lets you model diacritics.
  • KeyboardAction.accent is a new typealias for the .diacritic action.
  • KeyboardAction.diacritic is a new action that lets you insert diacritics.
  • KeyboardController has a new insertDiacritic(_:) function.
  • KeyboardLayout and its Item has much new functionality.
  • KeyboardLocale has new locale-based initializers and matching functions.
  • UITextDocumentProxy has a new insertDiacritic(_:) function.

๐Ÿ’ก Adjustments

  • KeyboardInputViewController autocompleteText now uses the pre-cursor part of the current word, instead of the full word.
  • KeyboardInputViewController hostBundleId has been renamed to hostApplicationBundleId.

๐ŸŒ New Locales

  • French (Canada) - fr_CA
  • Norwegian (Nynorsk) - nn
  • Spanish (Latin America) - es_419
  • Spanish (Mexico) - es_MX
  • Welsh - cy

๐Ÿ‘‘ KeyboardKit Pro

  • Callouts.StandardActionProvider now allocates license services lazily, on demand.

  • Keyboard.ToggleToolbar can now use an external toggle binding.

  • Keyboard.ToggleToolbar no longer relies on a standard AnyView.

  • Keyboard.ToggleToolbarToggle is a new, customizable toolbar toggle.

  • KeyboardContext has a new hostApplication property.

  • KeyboardHostApplication is a new enum with known applications.

  • KeyboardInputViewController has a new hostApplication property.

  • KeyboardInputViewController setupPro no longer creates a new callout provider.

  • KeyboardInputViewController setupPro no longer creates a new layout provider.

  • KeyboardLayout has a new LatinLayoutType enum.

  • KeyboardLayout.ProProvider.Czech now uses proper diacritic keys on iPhone & iPad.

  • KeyboardLayout.StandardProvider now allocates license services lazily, on demand.

  • KeyboardLocale.georgian no longer uses regular font weight in alphabetic keyboard.

  • KeyboardLocale.norwegian has adjusted callout actions.

  • These locales now use iPad Pro layout:

    • Arabic
    • Belarusian
    • Bulgarian
    • Catalan
    • Cherokee
    • Hebrew
    • Kazakh
    • Kurdish Sorani
    • Kurdish Sorani - Arabic
    • Kurdish Sorani - PC
    • Persian
  • These locales have improved iPad Pro layouts:

    • French (Switzerland)
    • Greek
    • Inari Sami
    • Macedonian
    • Mongolian
  • These locales have improved iPhone layouts:

    • Arabic

๐Ÿ› Bug fixes

  • KeyboardAction.tab now uses an LTR/RTL supporting icon.
  • KeyboardContext now matches keyboardLocale on language code as well, to work around system bug.
KeyboardKit -

Published by danielsaidi 5 months ago

This version adds support for 5 new locales, support for diacritics, and makes it easier to identify the host application. It also improves many of the localized system keyboards that are provided by Pro.

This version also changes the default autocomplete behavior, by making KeyboardInputViewController only use the pre-cursor part of the current word for autocomplete, which is how the native keyboard behaves.

This version also makes KeyboardKit Pro no longer overwrite custom services that are set before registering a license. This means that you can now apply custom services at any time, without it being overwritten.

This version also reduces load times and memory usage in KeyboardKit Pro, by lazily resolving localized callout action providers and layout providers, and makes all supported locales use the iPad Pro layout.

โœจ Features

  • Keyboard.Accent is a new typealias for diacritics.
  • Keyboard.Diacritic is a new type that lets you model diacritics.
  • KeyboardAction.accent is a new typealias for the .diacritic action.
  • KeyboardAction.diacritic is a new action that lets you insert diacritics.
  • KeyboardController has a new insertDiacritic(_:) function.
  • KeyboardLayout and its Item has much new functionality.
  • KeyboardLocale has new locale-based initializers and matching functions.
  • UITextDocumentProxy has a new insertDiacritic(_:) function.

๐Ÿ’ก Adjustments

  • KeyboardInputViewController autocompleteText now uses the pre-cursor part of the current word, instead of the full word.
  • KeyboardInputViewController hostBundleId has been renamed to hostApplicationBundleId.

๐ŸŒ New Locales

  • French (Canada) - fr_CA
  • Norwegian (Nynorsk) - nn
  • Spanish (Latin America) - es_419
  • Spanish (Mexico) - es_MX
  • Welsh - cy

๐Ÿ‘‘ KeyboardKit Pro

  • Callouts.StandardActionProvider now allocates license services lazily, on demand.

  • Keyboard.ToggleToolbar can now use an external toggle binding.

  • Keyboard.ToggleToolbar no longer relies on a standard AnyView.

  • Keyboard.ToggleToolbarToggle is a new, customizable toolbar toggle.

  • KeyboardContext has a new hostApplication property.

  • KeyboardHostApplication is a new enum with known applications.

  • KeyboardInputViewController has a new hostApplication property.

  • KeyboardInputViewController setupPro no longer creates a new callout provider.

  • KeyboardInputViewController setupPro no longer creates a new layout provider.

  • KeyboardLayout has a new LatinLayoutType enum.

  • KeyboardLayout.ProProvider.Czech now uses proper diacritic keys on iPhone & iPad.

  • KeyboardLayout.StandardProvider now allocates license services lazily, on demand.

  • KeyboardLocale.georgian no longer uses regular font weight in alphabetic keyboard.

  • KeyboardLocale.norwegian has adjusted callout actions.

  • These locales now use iPad Pro layout:

    • Arabic
    • Belarusian
    • Bulgarian
    • Catalan
    • Cherokee
    • Hebrew
    • Kazakh
    • Kurdish Sorani
    • Kurdish Sorani - Arabic
    • Kurdish Sorani - PC
    • Persian
  • These locales have improved iPad Pro layouts:

    • French (Switzerland)
    • Greek
    • Inari Sami
    • Macedonian
    • Mongolian
  • These locales have improved iPhone layouts:

    • Arabic

๐Ÿ› Bug fixes

  • KeyboardAction.tab now uses an LTR/RTL supporting icon.
  • KeyboardContext now matches keyboardLocale on language code as well, to work around system bug.
KeyboardKit -

Published by danielsaidi 5 months ago

This version updates Pro licenses.

Package Rankings
Top 4.07% on Cocoapods.org
Top 8.54% on Swiftpackageindex.com
Related Projects