KeyboardKit Pro helps you create custom keyboards for iOS and iPadOS.
OTHER License
Bot releases are visible (Hide)
This version adds support for iPad Pro layouts to KeyboardKit Pro, for selected locales.
The documentation has been thoroughly rewritten to be more consistent and to include more images and code samples.
DeviceType
has a new boolean properties.Image
has many more keyboard image extensions.KeyboardAction
has a new capsLock
action.Keyboard.Case
has a new isCapsLocked
property.Keyboard.KeyboardType
has a new isAlphabeticCapsLocked
property.Keyboard.ReturnKeyType
has a new nativeType
property on iOS
.KeyboardLayout.ItemRow
has new hasKeyboardSwitcher
and suggestedInputWidth
function.KeyboardLayout.ItemRows
has new hasKeyboardSwitcher
and inputWidth
function.KeyboardStyleProvider
has a new buttonContentInsets
function.iPadProKeyboardLayoutProvider
is a new layout provider for iPad Pro layouts.ProKeyboardLayoutProvider.spanish
now supports QWERTY, QWERTZ and AZERTY.iPadProKeyboardLayoutProvider
is (so far) used by the following locales:.english
.albanian
.croatian
.dutch
.dutchBelgium
.estonian
.filipino
.french
.french_belgium
.french_switzerland
.hungarian
.indonesian
.irish
.italian
.latvian
.lithuanian
.malay
.polish
.portuguese
.portuguese_brazil
.romanian
.serbian_latin
.spanish
.slovenian
.swahili
.swedish
.uzbek
KKL10n
has a new capsLock
key, which is currently only localized in English.InputSet.azerty
now displays correctly on iPad.Image.keyboardLeft
has been renamed to .keyboardArrowLeft
.Image.keyboardRight
has been renamed to .keyboardArrowRight
.This version adjusts localization and adds support for Inari Sรกmi and Northern Sรกmi.
SubmitLabel+CaseIterable
makes the type implement CaseIterable
.KeyboardLocale.northernSami
is a new supported locale.KeyboardLocale.inariSami
is a new supported locale.KeyboardInputViewController
now unregisters itself as shared controller in deinit.KKL10n
no longer has a .searchEmoji
key.PreviousAppNavigator
has been deprecated..keyboardDictation
modifiers now support injecting a custom service.KeyboardUrlOpener
has been deprecated.KKL10n.emergencyCall
has been deprecated.KKL10n.keyboardTypeAlphabetic
has been renamed to .switcherAlphabetic
.KKL10n.keyboardTypeNumeric
has been renamed to .switcherNumeric
.KKL10n.keyboardTypeSymbolic
has been renamed to .switcherSymbolic
.KKL10n.ok
has been deprecated.This version improves autocomplete and localized provider capabilities.
This version removes the temporary migration types that were added in 8.0. To upgrade to this or any later version, first update to 8.0 and follow the migration guides. This will remove any breaking changes when upgrading to this version.
Autocomplete
has a new AutocorrectionDisabledToContextModifer
modifier.AutocompleteContext
has a new isAutocorrectDisabled
property.LocaleDictionary
has new getters and setters.StandardCalloutActionProvider
has a new registerLocalizedProvider
function.StandardKeyboardLayoutProvider
has a new registerLocalizedProvider
function.View
has a new autocorrectionDisabled(with:)
modifier.SystemKeyboard
now automatically honors any .autocorrectionDisabled()
that is applied above it.LocalAutocompleteProvider
maxCount
is now public
and mutable.LocalAutocompleteProvider
removes autocorrect suggestions if the context has autocorrect disabled.RemoteAutocompleteProvider
autocompleteSuggestions
is now open
.RemoteAutocompleteProvider
properties are now public
and mutable.RemoteAutocompleteProvider
removes autocorrect suggestions if the context has autocorrect disabled.KeyboardLocale.kurdish_sorani_pc
now displays its localized name properly in iOS 17.AutocompleteContext
isEnabled
is renamed to isAutocompleteEnabled
.This patch removes previous app navigation from KeyboardKit Pro after sudden App Store review rejections.
KeyboardInputViewController
no longer shows license validation error alerts by default.KeyboardInputViewController
now lets you define whether or not to show a license validation error alert.PreviousAppNavigator
default navigator is removed, since it started causing occasional review rejections.This patch improves system keyboard toolbars and the ToggleToolbar in KeyboardKit Pro.
The demo app has been improved to persist the typed text and to show more pro features, like the full document reader and a theme picker.
Collection<KeyboardTheme>
has a new, static allPredefined
property.KeyboardTheme.ShelfView
is a new view that creates scrolling shelves.KeyboardTheme.ShelfViewItem
is a new view that can be used in a theme shelf view.KeyboardTheme.Collection
is now Identifiable
.SystemKeyboard
now applies a minimum height to custom toolbars, to avoid confusion where they disappear when no height is applied.SystemKeyboardButtonPreview
now disables hit testing for the button view.Gestures.GestureButton
now has a public initializer.Gestures.ScrollViewGestureButton
now has a public initializer.SystemKeyboardButtonPreview
now uses the passed in style provider, if any.ToggleToolbar
now uses the same default .slideUp
animation for all initializers.ToggleToolbar
now applies a content shape to the default toggle to improve tap area.ToggleToolbar
deprecates the toggleView
initializer in favor for the shorter toggle
one.This patch fixes an iOS 17 dictation navigation bug and syncs the controller's host bundle ID with the keyboard context.
KeyboardContext
has a new hostApplicationBundleId
property.SystemKeyboardButtonPreview
has been simplified and made greedy.SystemKeyboardPreview
can now be used as a header/footer without useing any modifiers.PreviousAppNavigator
has been configured to work even in iOS 17.StandardKeyboardDictationService
can once again navigate back when dictation finishes.InputSet.Turkish
has been slightly adjusted.SystemKeyboardButtonPreview
now renders themes correctly.PreviousAppNavigator
now renders themes correctly.SystemKeyboardPreview
header/footer modifiers are removed since they're no longer needed. See the docs.This patch improves the text routing views and fixes a big in the text field.
KeyboardTextView
makes it easier to define leading and trailing views for the native text field.KeyboardTextView
applies padding to the native text field's left and right side views.KeyboardTextView
auto-reset in 8.0.2. This has been fixed.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.
This release removes previously deprecated code, moves types into namespaces, and removes low-value utilities, including types solely used for DocC exposure (since this will be supported in future Xcode 15 builds).
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 emoji keyboard is available.
The documentation 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.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.StandardKeyboardActionHandler
has a new emojiRegistration
property.StandardKeyboardActionHandler
has a new tryRegisterEmoji(after:on:)
.StandardKeyboardActionHandler
has a new tryPerformAutocomplete(after:on:)
.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.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
filters out all unavailable emojis.Emojis.Version
has more ways to handle emoji versions.ExternalKeyboardContext
class is now a Pro feature.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.ProCalloutActionProvider
is a new Pro callout action provider.RemoteAutocompleteProvider
is now available to all license tiers.SystemKeyboardPreview
replaces all other system keyboard previews.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 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 emoji keyboard is available.
The documentation 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.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.StandardKeyboardActionHandler
has a new emojiRegistration
property.StandardKeyboardActionHandler
has a new tryRegisterEmoji(after:on:)
.StandardKeyboardActionHandler
has a new tryPerformAutocomplete(after:on:)
.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.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
filters out all unavailable emojis.Emojis.Version
has more ways to handle emoji versions.ExternalKeyboardContext
class is now a Pro feature.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.ProCalloutActionProvider
is a new Pro callout action provider.RemoteAutocompleteProvider
is now available to all license tiers.SystemKeyboardPreview
replaces all other system keyboard previews.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).