KeyboardKit Pro helps you create custom keyboards for iOS and iPadOS.
OTHER License
Bot releases are hidden (Show)
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 Link
s, since iOS 18 can no longer open URLs using the selector-based approach.
GestureButton
is a new inline dependency.Image
has a new .keyboardUrl
extension.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
.Dictation.DisabledKeyboardService
now resets its context on the main queue, which silences a background thread warning.Gestures.GestureButton
and some related types have been deprecated.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.
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.This version fixes a few inconsistencies and bugs.
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.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.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.
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.
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.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.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.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.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.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.
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.
Callouts.DisabledActionProvider
is a new, disabled action provider.KeyboardLayout.DisabledProvider
is a new, disabled layout provider.SystemKeyboard
only loads the emoji keyboard when the keyboard type is .emojis
.Keyboard.Services
now properly applies an inverse offset for RTL locales.This version fixes some bugs that were found in RC1 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.
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.
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.
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.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.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.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.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.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 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.
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.
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.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.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.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.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.*Service
for a more consistent naming.*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.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.
Callouts.DisabledActionProvider
is a new, disabled action provider.KeyboardLayout.DisabledProvider
is a new, disabled layout provider.SystemKeyboard
only loads the emoji keyboard when the keyboard type is .emojis
.Keyboard.Services
now properly applies an inverse offset for RTL locales.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.
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 Font
s. This may cause some breaking changes that should be easy to fix.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.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.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.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.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.Keyboard.ReturnKeyType
prefersAutocomplete
has been deprecated, since the keyboard type should determine this.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.
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 Font
s. This may cause some breaking changes that should be easy to fix.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.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.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.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.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.Keyboard.ReturnKeyType
prefersAutocomplete
has been deprecated, since the keyboard type should determine this.IMPORTANT! This version has a bug where unknown suggestions are not learned when tapped. Until RC3 is out, you can make this work by adding the following in the KeyboardKit Pro license configuration block:
guard let handler = services.actionHandler as? KeyboardAction.StandardHandler else { return }
handler.autocompleteProvider = services.autocompleteProvider
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.
The local autocomplete provider will also now use any lexicon match as the primary autocorrecting word.
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.
Autocomplete.LocalProvider
no longer caps suggestions by default. 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 Font
s, to give you more design freedom. This may result in breaking changes, but these should be easy to fix.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.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.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.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.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.Keyboard.ReturnKeyType
prefersAutocomplete
has been deprecated, since the keyboard type should determine this.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.
KeyboardStyleProvider
and Keyboard.ButtonStyle
now supports defining native Font
s, 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.
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.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.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.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.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.Keyboard.ReturnKeyType
prefersAutocomplete
has been deprecated, since the keyboard type should determine this.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.
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.KeyboardInputViewController
autocompleteText
now uses the pre-cursor part of the current word, instead of the full word.KeyboardInputViewController
hostBundleId
has been renamed to hostApplicationBundleId
.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:
These locales have improved iPad Pro layouts:
These locales have improved iPhone layouts:
KeyboardAction.tab
now uses an LTR/RTL supporting icon.KeyboardContext
now matches keyboardLocale
on language code as well, to work around system bug.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.
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.KeyboardInputViewController
autocompleteText
now uses the pre-cursor part of the current word, instead of the full word.KeyboardInputViewController
hostBundleId
has been renamed to hostApplicationBundleId
.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:
These locales have improved iPad Pro layouts:
These locales have improved iPhone layouts:
KeyboardAction.tab
now uses an LTR/RTL supporting icon.KeyboardContext
now matches keyboardLocale
on language code as well, to work around system bug.This version makes it easier to create a themed style provider, and adds a new .numberPad
keyboard type.
Keyboard.KeyboardType
has a new .numberPad
type.KeyboardStyleProvider.themed
has new convenience apis.KeyboardContext
will now get its initial keyboard type set to the document text proxy's keyboard type.