KeyboardKit Pro helps you create custom keyboards for iOS and iPadOS.
OTHER License
Bot releases are visible (Hide)
Welcome to KeyboardKit 8.0 - a massive update to the KeyboardKit SDK.
KeyboardKit 8.0 is all about cleaning up the library to make it better structured and easier to use. It removes previously deprecated code, moves types into namespaces, and removes low-value utilities, including types solely used for DocC exposure.
Central types like SystemKeyboard
are easier to use. Passing state and services instead of a controller reduces the risk for memory leaks. It also no longer needs a width, but will take up as much space as it needs.
These updates has helped enabling new features, like fading the keyboard buttons while moving the cursor with space and other quality of life improvements and fixes. Accessibility has been drastically improved and the emoji keyboard redesigned.
Most emoji features are now Pro features, including the emoji keyboard. The SystemKeyboard
automatically removes the emoji key if no keyboard is available.
The documentation (can be downloaded from the list of files below) has been extensively updated to provide more information and code examples. Please report any inconsistencies found, as many changes have been made.
I hope that you will love this major update to KeyboardKit.
If you're a KeyboardKit 7 user, the best way to migrate to KeyboardKit 8 is to first upgrade to the last available 7.9 version. This version contains deprecations that helps you prepare for some of the changes in KeyboardKit 8.
As you then upgrade to KeyboardKit 8, the 8.0 release has many TEMPORARY deprecations to assist migration from KeyboardKit 7. These temporary deprecations will be removed in 8.1.
You may run into some breaking changes, since there are some type changes that can't be handled by these deprecations. I have tried to keep these to a minimum, but see the breaking changes section below if you run into any problems.
Here's a list of some things that may be important to know
KeyboardInputViewController
has moved state properties into a state
property.KeyboardInputViewController
has moved service properties into a services
property.ProKeyboardActionHandler
is a new action handler for pro keyboards. You can inherit it.StandardKeyboardActionHandler
no longer remembers tapped emojis. This is done with the pro handler.SystemKeyboard
provides MUCH easier customization, but requires explicit view builders.SystemKeyboard
now hides the emoji
keyboard key if emojiKeyboard
is an EmptyView
.SystemKeyboard
no longer has an emoji keyboard by deafult, since it's now a Pro feature.SystemKeyboard
no longer auto-hides the toolbar. You can do this in the toolbar
builder.InputSetBasedKeyboardLayoutProvider
is a new provider.KeyboardAction
now has a standardAccessibilityLabel
.KeyboardAction.emoji
can now be created with a string.KeyboardActionHandler
now handles autocomplete suggestions.KeyboardButton
now has edgeInsets
and an isPressed
binding.KeyboardContext
has proxy properties that mirror the controller.KeyboardInputViewController
has a new setupProError
property.KeyboardLayout.Item
has a new width(forRowWidth:inputWidth:)
function.KeyboardLocale
has new initializer that supports fuzzy name initialization.KeyboardLocale
has new, convenient collection extensions to get locales.KeyboardStyle.Background
now supports specifying images in more ways.KeyboardStyle.Background
now supports specifying the image content mode.KeyboardStyle.Button
now supports background color AND background style.KeyboardStyle.EmojiKeyboard
has a lot more configuration parameters now.SpaceDragGestureHandler
properties are now mutable to allow customizations.SystemKeyboard
has new view builders to make it MUCH easier to customize it.SystemKeyboard
now fades out the buttons when a space cursor drag is active.StandardKeyboardActionHandler
can now be created on all supported platforms.StandardKeyboardStyleProvider
now adjusts styles when a space drag is active.View.keyboardButton
supports custom insets and applies a menu to nextLocale
.View.keyboardButton
applies accessibility labels for actions that define them.View.keyboardButton
is a new extension that applies both a style and gestures.View.keyboardCalloutContainer
is a new extension that will apply both callouts.View.keyboardLayoutItemSize
is a new extension that applies a layout item size.AutocompleteProvider
is now async.EmojiKeyboard
uses the standard context style as default.Gesture.KeyboardButtonGestures
no longer blocks space releases.InputSet
has been converted to a struct. All subsets are removed.ProKeyboardActionHandler
is a new, Pro-supporting action handler.KeyboardAction
no longer defines a default .nextKeyboard
action.KeyboardController
has fewer functions, since it's not used as much.KeyboardInputViewController
is no longer used to insert suggestions.SystemKeyboard
no longer needs you to provide it with an explicit width.SystemKeyboard
now guides you to use the controller-based setup function.KeyboardInputViewController
textDidChange
performs operations after a delay.EmojiKeyboard
has a new state/services initializer.EmojiKeyboard
has menu icons that look more native.Emojis.Categories
auto-filters out unavailable emojis.Emojis.Version
has more version-based capabilities.ExternalKeyboardContext
class is now a Pro features.FeedbackToggle
parameter is renamed to configuration.FullDocumentContextReader
has been removed (use proxy).KeyboardTextField
& KeyboardTextView
are now Pro features.LocalAutocompleteProvider
autocorrects i
to I
in English.ProKeyboardActionHandler
is a new Pro keyboard action handler.ProCalloutActionProvider
is a new Pro callout action provider.RemoteAutocompleteProvider
is now available to all license tiers.SystemKeyboardButtonPreview
is a new system keyboard button preview.KeyboardInputViewController
has a license config action for both setups.Emojis.Version
fixes an iOS availability bug for Unicode v15.FeedbackConfiguration
used an incorrect disabled audio config by default.KeyboardAction.backspace
didn't properly trigger autocapitalization.SystemKeyboard
now uses images for .space
from the style provider.textDidChange
performs autocomplete after an async delay, to let the proxy update.textDidChange
applies autocapitalization after an async delay, to let the proxy update.AudioFeedback.Engine
is no longer open to inheritance.Autocomplete.ToolbarItemSubtitle
init takes a suggestion.CalloutContext.ActionContext
no longer uses an action handler.CasingAnalyzer
has been removed (use String
extensions).DisabledCalloutActionProvider
has been removed.EmojiKeyboardItem
has been removed.EmojiProvider
has been removed.EnglishCalloutActionProvider
is now a Pro feature.EnglishKeyboardLayoutProvider
has been removed.ExternalKeyboardContext
is now a Pro feature.FeatureToggle
has been removed.HapticFeedback.Engine
is no longer open to inheritance.KeyboardAction.emojiCategory
has been removed.KeyboardCharacterProvider
has been removed (use String
extensions).KeyboardColor
has been made internal.KeyboardColorReader
has been removed (use Color
extensions).KeyboardContext
no longer has a controller-based init (use sync(with:)
).KeyboardContext
textDocumentProxy
is read-only, but originalTextDocumentProxy
can be set.KeyboardHostingController
has been made internal.KeyboardSettingsUrlProvider
has been removed (use URL.keyboardSettings
).KeyboardStyle.EmojiKeyboard
has different parameters for the new menu design.KeyboardTextContext
was not used and has been removed to avoid complexity.Routing
text input components are now Pro features.KeyboardTextField
was not used and has been removed to avoid complexity.LocaleDirectionAnalyzer
has been removed (use Locale
extensions).LocaleNameProvider
has been removed (use Locale
extensions).NextKeyboardController
has been made internal.QuotationAnalyzer
has been removed (use String
extensions).SentenceAnalyzer
has been removed (use String
extensions).StandardCalloutActionProvider.standardProvider
has been removed.StaticKeyboardLayoutProvider
has been removed.SystemKeyboard
now requires explicit view builders.SystemKeyboardItem
can no longer be initialized outside the library.ToggleToolbar
is now a Pro feature.View.keyboardButtonStyle(...)
no longer has an isPressed
parameter.WordAnalyzer
has been removed (use String
extensions).Welcome to KeyboardKit 8.0 - a massive update to the KeyboardKit SDK.
KeyboardKit 8.0 is all about cleaning up and polishing the SDK to make it more approachable, better structured and easier to use. This version removes all previously deprecated code, reorganizes types into namespaces, and removes low-value utilities, including types solely used for DocC exposure.
Central types like SystemKeyboard
are now easier to use. Passing state and services instead of a controller reduces the risk for memory leaks. It also no longer needs you to provide a width, and will take up as much space as it needs. It also makes it a lot easier to provide a custom toolbar and emoji keyboard.
These updates will simplify scaling the library and has helped enabling a new feature that fades the keyboard button labels while moving the cursor with the space key. There are many other quality of life improvements and bug fixes. Accessibility has been drastically improved for Voice Over and the emoji keyboard has been redesigned.
Most emoji features, including the emoji keyboard and category information, are now Pro features. The SystemKeyboard
automatically removes the emoji key if no emoji keyboard is provided.
The documentation (can be downloaded from the list of files below) has been extensively updated to provide more information and code examples. Please report any inconsistencies found, as many changes have been made in this version.
I hope that you will love this major update to KeyboardKit.
Consider upgrading to the last 7.x version of KeyboardKit before moving to 8.0, as it has types and deprecations that are removed in this version.
KeyboardKit 8.0 includes TEMPORARY deprecations to assist migration from KeyboardKit 7. These temporary deprecations will be removed in 8.1.
See the breaking changes section below if you run into any breaking changes. Reach out if you run into problems that are not mentioned here.
ProKeyboardActionHandler
when using a custom action handler with Pro.KeyboardInputViewController
has moved state properties into a state
property.KeyboardInputViewController
has moved services properties into a services
property.StandardKeyboardActionHandler
no longer remembers tapped emojis. This has moved to Pro.SystemKeyboard
provides MUCH easier customization, but requires explicit view builders.SystemKeyboard
now hides the emoji
keyboard key if emojiKeyboard
is an EmptyView
.SystemKeyboard
no longer has an emoji keyboard by deafult, since it's now a Pro feature.SystemKeyboard
no longer auto-hides the toolbar. You can do this in the toolbar
builder.InputSetBasedKeyboardLayoutProvider
is a new provider.KeyboardAction
now has a standardAccessibilityLabel
.KeyboardAction.emoji
can now be created with a string.KeyboardActionHandler
now handles autocomplete suggestions.KeyboardButton
now has edgeInsets
and an isPressed
binding.KeyboardContext
has proxy properties that mirror the controller.KeyboardLayout.Item
has a new width(forRowWidth:inputWidth:)
function.KeyboardLocale
has new, convenient collection extensions to get locales.KeyboardStyle.Background
now supports specifying the image content mode.KeyboardStyle.Button
now supports background color AND background style.KeyboardStyle.EmojiKeyboard
has a lot more configuration parameters now.SpaceDragGestureHandler
properties are now mutable to allow customizations.SystemKeyboard
has new view builders to make it MUCH easier to customize it.SystemKeyboard
now fades out the buttons when a space cursor drag is active.StandardKeyboardActionHandler
can now be created on all supported platforms.StandardKeyboardStyleProvider
now adjusts styles when a space drag is active.View.keyboardButton
supports custom insets and applies a menu to nextLocale
.View.keyboardButton
applies accessibility labels for actions that define them.View.keyboardButton
is a new extension that applies both a style and gestures.View.keyboardCalloutContainer
is a new extension that will apply both callouts.View.keyboardLayoutItemSize
is a new extension that applies a layout item size.AutocompleteProvider
is now async.EmojiKeyboard
uses the standard context style as default.Gesture.KeyboardButtonGestures
no longer blocks space releases.InputSet
has been converted to a struct. All subsets are removed.ProKeyboardActionHandler
is a new, Pro-supporting action handler.KeyboardAction
no longer defines a default .nextKeyboard
action.KeyboardController
has fewer functions, since it's not used as much.KeyboardInputViewController
is no longer used to insert suggestions.SystemKeyboard
no longer needs you to provide it with an explicit width.SystemKeyboard
now guides you to use the controller-based setup function.KeyboardInputViewController
textDidChange
performs operations after a delay.EmojiKeyboard
has a new state/services initializer.EmojiKeyboard
has menu icons that look more native.ExternalKeyboardContext
class is now a Pro features.FeedbackToggle
parameter is renamed to configuration.FullDocumentContextReader
has been removed (use proxy).KeyboardTextField
& KeyboardTextView
are now Pro features.LocalAutocompleteProvider
autocorrects i
to I
in English.ProKeyboardActionHandler
is a new Pro keyboard action handler.ProCalloutActionProvider
is a new Pro callout action provider.RemoteAutocompleteProvider
is now available to all license tiers.SystemKeyboardButtonPreview
is a new system keyboard button preview.KeyboardInputViewController
has a license config action for both setups.KeyboardAction.backspace
didn't properly trigger autocapitalization.SystemKeyboard
now uses images for .space
from the style provider.textDidChange
performs autocomplete after an async delay, to let the proxy update.textDidChange
applies autocapitalization after an async delay, to let the proxy update.AudioFeedback.Engine
is no longer open to inheritance.Autocomplete.ToolbarItemSubtitle
init takes a suggestion.CalloutContext.ActionContext
no longer uses an action handler.CasingAnalyzer
has been removed (use String
extensions).DisabledCalloutActionProvider
has been removed.EmojiKeyboardItem
has been removed.EmojiProvider
has been removed.EnglishCalloutActionProvider
is now a Pro feature.EnglishKeyboardLayoutProvider
has been removed.ExternalKeyboardContext
is now a Pro feature.FeatureToggle
has been removed.HapticFeedback.Engine
is no longer open to inheritance.KeyboardAction.emojiCategory
has been removed.KeyboardCharacterProvider
has been removed (use String
extensions).KeyboardColor
has been made internal.KeyboardColorReader
has been removed (use Color
extensions).KeyboardContext
no longer has a controller-based init (use sync(with:)
).KeyboardContext
textDocumentProxy
is read-only, but originalTextDocumentProxy
can be set.KeyboardHostingController
has been made internal.KeyboardSettingsUrlProvider
has been removed (use URL.keyboardSettings
).KeyboardStyle.EmojiKeyboard
has different parameters for the new menu design.KeyboardTextContext
was not used and has been removed to avoid complexity.Routing
text input components are now Pro features.KeyboardTextField
was not used and has been removed to avoid complexity.LocaleDirectionAnalyzer
has been removed (use Locale
extensions).LocaleNameProvider
has been removed (use Locale
extensions).NextKeyboardController
has been made internal.QuotationAnalyzer
has been removed (use String
extensions).SentenceAnalyzer
has been removed (use String
extensions).StandardCalloutActionProvider.standardProvider
has been removed.StaticKeyboardLayoutProvider
has been removed.SystemKeyboard
now requires explicit view builders.SystemKeyboardItem
can no longer be initialized outside the library.ToggleToolbar
is now a Pro feature.View.keyboardButtonStyle(...)
no longer has an isPressed
parameter.WordAnalyzer
has been removed (use String
extensions).EmojiVersion
adjusts iOS and tvOS versions for emoji v15.SystemKeyboardPreview.Configuration
no longer applies a color scheme by default.EmojiKeyboardButton
has been deprecated.EnglishCalloutActionProvider
has been soft deprecated.This release prepares the library for the upcoming major version bump, which will clean up the library and make it easier to use.
Many types have been deprecated with proper @available
annotations, but those that can't be deprecated yet are soft deprecated with a [DEPRECATED]
comment. > v8.0:
comments are added where structural or architectural changes will, but currently can't be made.
Many keyboard types are moved into a new Keyboard
namespace, and that many styles are moved into a new KeyboardStyle
namespace. This introduction of namespace types will make it easier to overview the library and find types within it.
Another big change is that the InputSetProvider
concept is replaced by just using InputSet
s. This removes a lot of complexity and makes it easier to create custom layouts and use various input sets together.
Other big changes are that the KeyboardAppearance
is renamed to KeyboardStyleProvider
, the Appearance
namespace to Styling
and that the KeyboardFeedbackHandler
is merged into the KeyboardActionHandler
to just have a single type.
AutocompleteActionProvider.disabled
is a new alias for DisabledAutocompleteProvider
.CalloutActionProvider.disabled
is a new alias for DisabledCalloutActionProvider
.DictationService.disabled
is a new alias for DisabledDictationService
.HapticFeedbackConfiguration
has new press
and release
configurations.Image.keyboardShift
is a new image.InputSet
has new English
builders.Keyboard
is a new namespace type for some keyboard-specific types.Keyboard.ReturnKeyType
has new continue
, emergencyCall
and route
types.Keyboard.ReturnKeyType
has a new prefersAutocomplete
property.KeyboardActionHandler
has new feedback functions.KeyboardDictationService.disabled
is a new alias for DisabledKeyboardDictationService
.KeyboardFeedbackSettings
has new enabled and disabled configurations.KeyboardInputViewController
has new view lifecycle functions for registering and unregistering as the shared controller.KeyboardLayoutProviderProxy
has new standard functionality.KeyboardStyle
is a new style namespace that contains most style types.KeyboardStyleProvider
has a new function for the button content bottom margin.PreviewKeyboardInputViewController
is a new preview type.StandardKeyboardActionHandler
has new feedback functions.StandardKeyboardFeedbackHandler
has new feedback functions.StandardKeyboardLayoutProvider
has a new default initializer.SystemKeyboard
is now available on all platforms.View
has a new withEnvironment(from:)
extension.AudioFeedbackEngine
has been converted from a protocol to an open class.AutocompleteToolbar
items now use .current
as default locale.KeyboardActionHandler
has a new triggerFeedback(for:on:)
function.SpaceCursorDragGestureHandler
no longer needs a feedback handler.StandardKeyboardLayoutProvider
no longer requires an input set provider.StandardKeyboardStyleProvider
adjusts the bottom padding for some keys.SystemKeyboardLayoutProvider
now returns switcher actions for all keyboard types.AutocompleteToolbarPreview
is a new preview component.InputSet
has new input sets for some locales.InputSet
has new throwing properties for the localized input sets.KeyboardThemeAppearance
has a been renamed to ThemeBasedKeyboardStyleProvider
.ProInputSetProvider
and all its locale-specific types have been deprecated.ProKeyboardLayoutProvider
and all localized subclasses use input sets instead of providers.ProKeyboardLayoutProvider
and all localized subclasses can now be provided with custom input sets.SystemKeyboardPreview
is a new preview component.KeyboardThemeLivePreview
has been renamed to SystemKeyboardThemePreview
.KeyboardThemeLivePreviewHeader
has been renamed to SystemKeyboardThemePreviewHeader
.SystemKeyboardThemePreview
now works on all platforms.EmojiCategoryKeyboard
no longer requires two gestures when it's presented by the SystemKeyboard
. This was strangely enough fixed by the SystemKeyboardLayoutProvider
adjustment.EmojiCategoryKeyboard
now applies an interactable background to the grid, to make scrolling work even where there are no emojis.KeyboardContext
now switching to alphabetic when inserting a new line after a sentence delimiter in numeric and symbolic keyboards.AudioFeedbackConfiguration.noFeedback
has a been renamed to .disabled
.AudioFeedbackConfiguration.standard
is replaced by .enabled
.ActionCalloutContext
has been renamed to KeyboardCalloutContext.ActionContext
.AutocompleteSpaceState
has been deprecated.AutocompleteSuggestion.isAutocomplete
has been renamed to isAutocorrect
.AutocompleteToolbarStyle
has been renamed to KeyboardStyle.AutocompleteToolbarItem
.AutocompleteToolbarItemBackgroundStyle
has been renamed to KeyboardStyle.AutocompleteToolbarItemBackground
.AutocompleteToolbarItemStyle
has been renamed to KeyboardStyle.AutocompleteToolbarItem
.AutocompleteToolbarSeparatorStyle
has been renamed to KeyboardStyle.AutocompleteSeparator
.Callout
views have been soft deprecated and will be made internal in 8.0.EmojiAnalyzer
has been deprecated.EmojiCategoryKeyboardMenu
has been soft deprecated and will be made internal in 8.0.EmojiCategoryTitle
has been soft deprecated and will be made internal in 8.0.EnglishInputSetProvider
has been deprecated.HapticFeedbackConfiguration.noFeedback
has a been renamed to .disabled
.AudioFeedbackConfiguration.standard
is replaced by .minimal
.InputCalloutContext
has been renamed to KeyboardCalloutContext.InputContext
.InputSetProvider
and all related types have been deprecated.InterfaceOrientationResolver
has been deprecated.KeyboardActionCalloutStyle
has been renamed to KeyboardStyle.ActionCallout
.KeyboardAppearance
has been renamed to KeyboardStyleProvider
.KeyboardAutocapitalizationType
has been renamed to Keyboard.AutocapitalizationType
.KeyboardBackgroundStyle
has been renamed to KeyboardStyle.Background
.KeyboardBackspaceRange
has been renamed to Keyboard.BackspaceRange
.KeyboardButtonStyle
has been renamed to KeyboardStyle.Button
.KeyboardButtonBorderStyle
has been renamed to KeyboardStyle.ButtonBorder
.KeyboardButtonShadowStyle
has been renamed to KeyboardStyle.ButtonShadow
.KeyboardCalloutContext
has been renamed to CalloutContext
.KeyboardCalloutContext.action
has been renamed to actionContext
.KeyboardCalloutContext.input
has been renamed to inputContext
.KeyboardCalloutStyle
has been renamed to KeyboardStyle.Callout
.KeyboardCase
has been renamed to Keyboard.Case
.KeyboardCase.standardButtonImage
has been deprecated.KeyboardCaseAdjustable
has been deprecated.KeyboardEnabledState
has been renamed to KeyboardEnabledContext
.KeyboardHostingController
has been soft deprecated.KeyboardFontType
has been renamed to KeyboardFont.FontType
.KeyboardFontWeight
has been renamed to KeyboardFont.FontWeight
.KeyboardInputCalloutStyle
has been renamed to KeyboardStyle.InputCallout
.KeyboardInputViewController
keyboardAppearance
has been renamed to keyboardStyleProvider
.KeyboardReturnKeyType
has been renamed to Keyboard.ReturnKeyType
.KeyboardType
has been renamed to Keyboard.KeyboardType
.NumericInputSet.english
has been renamed to englishNumeric
.NumericInputSet.standard
has been renamed to standardNumeric
.DisabledAudioFeedbackEngine
has been deprecated.DisabledHapticFeedbackEngine
has been deprecated.HapticFeedbackConfiguration.tap
has been replaced by press
and release
.KeyboardActions
has been renamed to KeyboardAction.Row
.KeyboardActions
image initializer has been deprecated.KeyboardActionRows
has been renamed to KeyboardAction.Rows
.KeyboardLayoutItemRow
has been renamed to KeyboardLayoutItem.Row
.KeyboardLayoutItemRows
has been renamed to KeyboardLayoutItem.Rows
.KeyboardLayoutItemSize
has been renamed to KeyboardLayoutItem.Size
.KeyboardLayoutItemWidth
has been renamed to KeyboardLayoutItem.Width
.KeyboardFeedbackHandler
has been deprecated.LocalizedCalloutActionProvider
has been deprecated.LocalizedKeyboardLayoutProvider
has been deprecated.PrefersAutocompleteResolver
has been deprecated.PreviewKeyboardActionHandler
has been renamed to KeyboardPreviews.ActionHandler
PreviewKeyboardAppearance
has been renamed to KeyboardPreviews.StyleProvider
.PreviewKeyboardInputViewController
has been renamed to KeyboardPreviews.InputViewController
PreviewKeyboardLayoutProvider
has been renamed to KeyboardPreviews.LayoutProvider
PreviewKeyboardStyleProvider
has been renamed to KeyboardPreviews.StyleProvider
PreviewTextDocumentProxy
has been renamed to KeyboardPreviews.TextDocumentProxy
StandardAudioFeedbackEngine
has been deprecated.StandardHapticFeedbackEngine
has been deprecated.StandardKeyboardAppearance
has been renamed to StandardKeyboardStyleProvider
.StandardKeyboardFeedbackHandler
has been deprecated.StaticKeyboardBehavior
has been deprecated.SymbolicInputSet.english
has been renamed to englishSymbolic
.SymbolicInputSet.standard
has been renamed to standardSymbolic
.SystemKeyboardLayoutProvider
utility extensions have been deprecated.EnglishKeyboardLayoutProvider
no longer has an open layout provider function.StandardKeyboardActionHandler
no longer uses a feedback handler.KeyboardActionHandler
has a new handle
function.KeyboardBackgroundStyle
has many new properties and builder functions.KeyboardButtonStyle
now has separate border and shadow properties.KeyboardContext
has a new hasMultipleLocales
property.KeyboardLayoutConfiguration
now has mutable standard values.KeyboardLayoutConfiguration
has new standard row height properties.NextKeyboardButton
no longer throws assert failures by default.PreviewAutocompleteProvider
is a new preview service.SystemKeyboard
has a new renderBackground
property.ToggleToolbar
is a new toolbar that can be used to toggle between two toolbars.KeyboardTheme
has a new isPredefined
property.KeyboardTheme
has a new copyWithoutAuthor
function.KeyboardTheme
style variations have been adjusted to use the new background style model.KeyboardThemeAppearance
is now open for inheritance.KeyboardThemeAppearance
will now use the largest shadow size to determine the bottom edge insets.KeyboardThemeCopyable
's copy
function has a new newName
parameter.KeyboardThemeFormModel
is a new observable type.KeyboardThemeLivePreview
has new initializers.KeyboardThemeLivePreviewHeader
is a new header preview.ToggleToolbar
is now part of the main library, and is no longer throwing.StandardKeyboardActionHandler
now sets a correct initial space drag offset position.StandardKeyboardActionHandler
now adjusts the space drag offset to handle combined emojis.KeyboardBackgroundStyle
has deprecated the type-based initializer and its property.KeyboardBackgroundType
has been deprecated.KeyboardInputViewController
pro setup functions have been redesigned.SpaceCursorDragGestureHandler
no longer requires a context.ToggleToolbar
throwing initializers have been deprecated.KeyboardTheme.Author
now uses String
instead of URL
for its url.This version aims to reduce the amount of lost keystrokes by adding a release outside tolerance, to let a button trigger a release event even if the release is a bit outside of the button bounds. The lack of such a tolerance may have caused lost keystrokes before, since it's easy to slide with your finger while typing and ending up with your finger outside the button bounds.
Since the best tolerance amount is still unclear, the keyboardButtonGestures
view extension now lets you specify a tolerance, which is a percentage of the button width.
This version also adds a vertical threshold when moving the input cursor with the space button, since dragging the finger too much up and down can result in unexpected movement.
This version also tweaks the emoji keyboards to look better and closer to the native ones.
There are also new keyboard actions, new url opening utilities, and a bunch of theme adjustments.
KeyboardAction
has new systemSettings
and url
actions.KeyboardAction
has a new standardAction
property.KeyboardAppearance
has new, optional foregroundColor
property.KeyboardController
has a new openUrl
function.KeyboardLayout
has a new hasEmojiKeyboardSwitcher
.KeyboardUrlOpener
is a new class for opening URLs.KeyboardEmojiKeyboard
KeyboardEmojiCategoryKeyboard
are tweaked to look closer to the system keyboards.KeyboardGestures
now handles a release outside as a release inside, if the release happens within a tolerance area.KeyboardTheme
has new author
, collectionName
and foregroundColor
properties.KeyboardThemeLivePreview
now renders light mode only as default.License
has new localizedCalloutActionProviders
, localizedInputSetProviders
and localizedKeyboardLayoutProviders
properties.StandardInputSetProvider
convenience initializer has been deprecated.StandardKeyboardLayoutProvider
convenience initializer has been deprecated.KeyboardTheme
didn't set the identifier when it was created with a MinimalStyle
.View+SystemKeyboardButton
didn't send the pressed state to the system keyboard button body.KeyboardThemePreview
has been renamed to KeyboardThemeLivePreview
.keyboardGestures
view extensions have been renamed to keyboardButtonGestures
.KeyboardTheme
no longer has a styleName
property.This version updates the new dictation beta feature, adjusts a lot of emoji skin tones and fixes some bugs.
The version also adds tools that make it possible to start keyboard dictation from DocumentGroup-based apps.
After receiving reports that the new dictation features required all apps to add dictation permissions to their Info.plist
, a lot of work has been put into separating speech recognition from dictation.
As a result, you must now provide a SpeechRecognizer
when using the built-in dictation features. An already implemented recognizer can be copied from the SpeechRecognizer
docs.
Removing the speech recognizer parts from the library makes the feature a little harder to use, but removes the need for all apps to specify the permission keys they really don't need.
DictationContext
has new initializers for specific usages.DictationContext
has a new silenceLimit
that can be used to define after how many seconds of silence dictation should finish.DictationContext
has a new isDictationStartedByKeyboard
that can be used when a deep link can't be used to start dictation.KeyboardDictationConfiguration
has a new matchesDeepLink
that simplifies checking if a specific deep link should start dictation.DictationContext
lastError
.DictationIndicator
has been renamed to DictationBarVisualizer
.DictationOverlay
has been renamed to DictationScreen
.DictationScreen
now supports adding a done button.DictationScreen
supports a style instead of using many parameters.SpeechRecognizer
is a new protocol that is used to separate speech recognition from dictation.StandardDictationService
now requires a speech recognizer.StandardKeyboardDictationService
now requires a speech recognizer.View.keyboardDictation(...)
now requires a speech recognizer.View.keyboardDictationOnAppear(...)
is a new view modifier that can be used in DocumentGroup-based apps.View.keyboardDictationOnDeepLink(...)
is a new view modifier that can be used to start dictation without an overlay.Emoji
skin tone variants have been adjusted.Emoji
neutral skin tone variants have been adjusted.GestureButton
no longer triggers timed events if it's removed before it's released.KeyboardDictationService
stopDictationInKeyboard
has been renamed to handleDictationResultInKeyboard
.KeyboardInputViewController
viewWillPerformDictation
has been renamed to viewWillHandleDictationResult
.This version updates the new dictionary beta feature.
After receiving reports that the new dictation features required all apps to add dictation permissions to their Info.plist
, a lot of work has been put into separating speech recognition from dictation.
As a result, you must now provide a SpeechRecognizer
when using the built-in dictation features, which fixes this problem. An already implemented recognizer can be copied from the SpeechRecognizer
docs.
DictationContext
has new initializers for specific usage.DictationContext
has a new silenceLimit
property.DictationContext
has a new isDictationStartedByKeyboard
property.KeyboardDictationConfiguration
has a new matchesDeepLink
.DictationContext
lastError
.DictationIndicator
has been renamed to DictationEqualizer
.DictationOverlay
now supports adding a done button.DictationOverlay
renders many thinner lines by default.DictationOverlay
supports a style instead of using many parameters.SpeechRecognizer
is a new specialized protocol used by the pro dictation services and view modifiers.View.keyboardDictation(...)
now requires a speech recognizer.View.keyboardDictationOnAppear(...)
is a new view modifier that can be used in DocumentGroup-based apps.View.keyboardDictationOnDeepLink(...)
is a new view modifier that can be used to start dictation without presenting an overlay.Emoji.skinToneVariant
values have been adjusted.Emoji.neutralSkinToneVariant
values have been adjusted.GestureButton
no longer triggers timed events if it's removed before it's released.KeyboardDictationService
stopDictationInKeyboard
has been renamed to handleDictationResultInKeyboard
.KeyboardInputViewController
viewWillPerformDictation
has been renamed to viewWillHandleDictationResult
.This version updates the new dictionary beta feature.
After receiving reports that the new dictation features in KeyboardKit Pro required all apps to add dictation permissions to their Info.plist
, a lot of work has been put into separating dictation from speech recognition.
As a result, you must now provide a SpeechRecognizer
when using Pro dictation. To avoid using Speech
framework features that require the unwanted permissions, an already implemented speech recognizer can be copied from the SpeechRecognizer
documentation.
DictationContext
has new initializers for specific usage.DictationContext
has a new isDictationStartedByKeyboard
property.KeyboardDictationConfiguration
has a new matchesDeepLink
.DictationContext
lastError
.DictationIndicator
has been renamed to DictationEqualizer
.DictationOverlay
now uses a style instead of many parameters.DictationOverlay
now renders many thinner lines by default.SpeechRecognizer
is a new specialized protocol used by the pro dictation services and view modifiers.View.keyboardDictation(...)
now requires a speech recognizer.View.keyboardDictationOnAppear(...)
is a new view modifier that can be used in DocumentGroup-based apps.View.keyboardDictationOnDeepLink(...)
is a new view modifier that can be used to start dictation without presenting an overlay.Emoji.skinToneVariant
values have been adjusted.Emoji.neutralSkinToneVariant
values have been adjusted.GestureButton
no longer triggers timed events if it's removed before it's released.KeyboardInputViewController
viewWillPerformDictation
has been renamed to viewWillHandleDictationResult
.This version updates the new dictionary beta feature.
After receiving reports that the new dictation features in KeyboardKit Pro required all apps to add dictation permissions to their Info.plist
, a lot of work has been put into separating dictation from speech recognition.
As a result, you must now provide a SpeechRecognizer
when using Pro dictation. To avoid using Speech
framework features that require the unwanted permissions, an already implemented speech recognizer can be copied from the SpeechRecognizer
documentation.
KeyboardDictationConfiguration
has a new matchesDeepLink
.DictationIndicator
has been renamed to DictationEqualizer
.DictationOverlay
now uses a style instead of many parameters.DictationOverlay
now renders many thinner lines by default.SpeechRecognizer
is a new specialized protocol used by the pro dictation services and view modifiers..keyboardDictationOverlay(...)
is a new view extension..onKeyboardDictationDeepLink(...)
is a new view extension..keyboardDictation(...)
view modifier requires a speech recognizer.This version adjusts how the next keyboard button behaves.
The next keyboard gestures is now moved from the system keyboard button content view to the gesture modifier, which means that it will always apply to views that are modified with gestures for that action.
This release also fixes a problem, where StandardKeyboardActionHandler
marking one initializer as convenience caused problems when inheriting it.
SystemKeyboardButtonContent
no longer applies a NextKeyboardButton
for .nextKeyboard
.StandardKeyboardActionHandler
no longer marks the inputViewController
initializer as convenience.View+KeyboardGestures
now applies a NextKeyboardButton
for .nextKeyboard
.This version improves the theme and dictation engines to make them easier to use. It also greatly improves the way KeyboardKit changes locales, and will now correctly change the primary language of the extension as well.
This version also deprecates the feature toggle for the new autocomplete provider and makes it the standard engine. It also renames the external provider to remote to better reflect what it does.
This version adds a mandatory id
to KeyboardTheme
, which makes it possible to refer to themes by reference, which is required for features like favoriting and selecting themes. While it's not mandatory to specify an id when creating a theme, it is a mandatory property, which may cause some side-effects if you've been persisting custom themes.
If you have persisted custom themes in your app, the addition of the mandatory ID will cause decoding to fail. Please reach out via [email protected] if this affects you, and decoding failure handling will be added to the library to handle any missing IDs.
DictationContext
has a new appDeepLink
property.DictationContext
has a new setup(with:)
function.KeyboardAction
now uses performDictation
for the dictation
action.KeyboardController
has a new performDictation
function.KeyboardEnabledLabel
now supports more styling.KeyboardInputViewController
has a new dictationConfig
property.KeyboardInputViewController
has a new performDictation
function.KeyboardLayout
has a new bottomRowIndex
property.KeyboardLayout
has a new bottomRowSystemItems
property.KeyboardLayout
has a new tryCreateBottomRowItem(for:)
function.KeyboardSettingsLink
now supports custom labels.KeyboardEnabledLabel
no longer colors text by default.KeyboardInputViewController
now changes primaryLanguage
when the context locale changes.KeyboardLocale
has new collection extension.KeyboardTheme
and all styles now have static IDs.KeyboardTheme
and all styles have a new copy
function.KeyboardTheme.allPredefined
is now stored instead of computed.KeyboardTheme.standard
is no longer throwing.KeyboardThemeButtonPreview
is a new preview.KeyboardThemeCopyable
is a new protocol that specifies theme copy behavior.KeyboardThemeStyleVariation
is a new protocol that can be used by theme styles.ExternalAutocompleteProvider
is renamed to RemoteAutocompleteProvider
.ExternalAutocompleteResult
is renamed to RemoteAutocompleteResult
.FeatureToggle.Feature.newAutocompleteEngine
is no longer used.KeyboardContext.tempIsPreviewMode
is no longer used.KeyboardLocale
sort with insert first parameter is replaced by atomic operations.StandardAutocompleteProvider
is renamed to LocalAutocompleteProvider
.@gonzalonunez
the KeyboardTextField
and KeyboardTextView
now disables captureTextFromCamera
.@f-person
some documentation errors have been fixed.DictationContext.lastAppGroupId
has been removed.KeyboardTheme.allPredefined
is no longer throwing.This release adds support for π°πΏ Kazakh and more locale and emoji features.
EmojiCategory
has new emojis for iOS 16.4, macOS 13.3, tvOS 16.4 and watchOS 9.4.KeyboardReturnKeyType
has new next
and send
cases.KeyboardTheme.candyShop
has a new .cuppyCake
style.KeyboardTheme.standard
has new .green
, .purple
and .yellow
styles.KeyboardTheme.minimal
can use all available StandardStyle
style variations.KeyboardTheme.swifty
can use all available StandardStyle
style variations.KKL10n
has new next
and send
keys.KeyboardLocale.armenian
localizes more texts (thanks to @f-person).KeyboardLocale.english
adds localizations for all emojis.KeyboardLocale.russian
localizes more texts (thanks to @f-person).Emoji
collections have a new allAvailableInSystemVersion
that can filter out unavailable emojis.EmojiVersionInfo
is a new type that contains information about when certain emojis were introduced.ProEmojiInfo
is deprecated in favor of just using the already defined Emoji
extensions.KeyboardTheme
.candy
is renamed to .candyShop
.KeyboardTheme
.standard
and .swifty
now applies a standard shadow.KeyboardTheme
CandyStyle
is renamed to CandyShopStyle
.KeyboardTheme
SwiftyStyle
deprecated in favor of reusing StandardStyle
.KeyboardAction.ReturnType
is renamed to KeyboardReturnKeyType
.KeyboardActionMappable
is deprecated.ActionCallout
now handles single actions.