KeyboardKit tries to honor semantic versioning:
- Deprecations can happen at any time.
- Deprecations should only be removed in
major
updates. - Breaking changes should not occur in
minor
andpatch
updates. - Breaking changes can occur in
minor
andpatch
updates, if needed.
These release notes only cover the current major version.
This version adds a new SystemKeyboardBottomRow
component, adds some new actions and fixes a bug.
KeyboardAction
has a new.text
action to insert long text.KeyboardLayout
has a new.bottomRowSystemItemWidth
property.SystemKeyboardComponent
is a new protocol that defines shared typealiases.
KeyboardAction.url
is now a system key.
SystemKeyboardBottomRow
is a new Pro component.
SystemKeyboard
no longer shows the emoji key for insufficient KeyboardKit Pro licenses.
This version adjusts the autocomplete behavior for empty text and fixes a gesture bug.
KeyboardInputViewController
no longer hard resets the autocomplete context when the text is empty.
KeyboardGesture
has a new.end
gesture, which is used to fix a bug that could cause space drag to never end.
- KeyboardKit Pro has new ways to allow more flexible feature and tier validation.
This version moves many types into their related namespaces, to make the SDK surface smaller and easier to overview. Since this involves many renamings, the Deprecations
section below only lists deprecated types.
The library has deprecation types to help you migrate to the new type names, so you should not run into any breaking changes when migrating from earlier versions to this one.
The KeyboardState
namespace has been renamed to KeyboardStatus
, since it was often confused with Keyboard.KeyboardState
. Keyboard.KeyboardState
& Keyboard.KeyboardServices
have also been renamed to the shorter Keyboard.State
and Keyboard.Services
, since it reads better in code.
This version also makes it easier register custom audio and haptic feedback, in a way that now requires less or no customizations in the action handler. Just register any custom feedback for any gesture on any action, and it will be triggered by the standard action handler.
This version also makes the action and input callout bubbles look more native.
Finally, KeyboardKit Pro makes more locales use the new iPad Pro layout. It also provides a brand new KeyboardApp.HomeScreen
that can be used as an app home screen, and a new KeyboardStatus.Section
that can show all relevant statuses for a keyboard app.
- Many types are moved into their related namespaces.
- The
EmojiKeyboard
sub-components are now throwing as well. - The
KeyboardStatus.Label
now uses its style to change icons. - Renamed types use
@available
deprecations to help adjust your code.
Feedback.Audio
has a newcustomUrl
that can play URL-based audio.Feedback.AudioConfiguration
has new ways to register custom feedback.Feedback.HapticConfiguration
has new ways to register custom feedback.FeedbackContext
has new ways to register custom audio/haptic feedback.KeyboardLayout
has a newcopy()
function that creates a mutable copy.KeyboardLayout
has new functions for using and tweaking the bottom row.KeyboardLayout
has a newinputToolbarLayout()
value builder function.KeyboardLayout
has a new functions for getting the total layout height.SystemKeyboard
's service-based initializer now allows a layout override.View
has a newkeyboardInputToolbarDisplayMode
modifier for input toolbars.
Callouts
now use curves that look a lot more native.Keyboard.Button
no longer has a minimum scale factor.KeyboardApp
is a new namespace for app-related types.KeyboardApp.HomeScreen
is a new app home screen view template.KeyboardLayout.Configuration
now defines number toolbar height.KeyboardFeedback
is a new namespace for feedback-related types.KeyboardSettings
is a new namespace for settings-related types.KeyboardStatus.Label
now uses filled icon variants, by default.KeyboardStyle.StandardProvider
now applies a light weight to backspace.KeyboardStyle.StandardProvider
now applies more adaptive content insets.SystemKeyboard
has been optimized in how it renders the system keyboard.
KeyboardApp.HomeScreen
is a new app-specific home screen template.KeyboardStatus
has a newSection
view that can display keyboard statuses.KeyboardTextField
andKeyboardTextView
can now trigger a customonSubmit
function.SystemKeyboard
now has anaddNumberToolbar
parameter to add a number toolbar in KeyboardKit Pro.- The iPad Pro layout has been tweaked to look more native, and is now used by all these locales as well:
Catalan
,Czech
,Danish
,Faroese
,Finnish
,Georgian
,German
,German (Austria)
,German (Switzerland)
,Greek
,Hawaiian
,Icelandic
,Inari Sámi
,Macedonian
,Maltese
,Mongolian
,Northern Sámi
,Norwegian
,Russian
,Serbian
,Slovak
,Turkish
,Ukrainian
.
Callouts.ButtonArea
has been deprecated.Callouts.Curve
has been deprecated.Emoji.Grid
has been moved toEmojiKit
.KeyboardStyleProvider.buttonContentBottomMargin
is no longer used.
This version bumps to Swift 5.9 and adds support for visionOS.
This version renames some views and refactors view styling to be injected with view modifiers instead of with the initializer.
This version also convers many emoji features to open-source variants, and no longer requires a license to use these features.
Views that require complex style resolving still use the style provider concept.
-
Most views are now designed to be styled with view modifiers.
-
.keyboardButtonStyle
only injects style with the environment. -
Emoji
types are no longer throwing. If you use them, removetry
. -
Emoji
keyboard views no longer apply the init style. Use the view modifier instead.
Autocomplete.ToolbarStyle
has support for more styling.Autocomplete.ToolbarItemStyle
has support for more styling.DeviceType
defines a new.vision
device to support visionOS.Keyboard.Background
implementsView
and can be used as a plain view.Keyboard.Toolbar
is a new view that applies a min height to its content.Keyboard.ToolbarStyle
is a new style that can be applied with a view modifier.StandardKeyboardBehavior
modifies some functions to beopen
to modifications.
AutocompleteToolbar
has been renamed toAutocomplete.Toolbar
.InputSet.standardNumeric
has been renamed toInputSet.numeric
.InputSet.standardSymbolic
has been renamed toInputSet.symbolic
.KeyboardButton.Button
and all related views have been moved toKeyboard
.KeyboardStyle
styles have all been renamed, e.g.Autocomplete.ToolbarStyle
.NextKeyboardButton
has been moved and renamed toKeyboard.NextKeyboardButton
.
.keyboardButtonStyle
has been renamed to.keyboardButton
..withEnvironment(fromState:)
has been renamed to.keyboardState(_:)
..withEnvironment(fromController:)
has been renamed to.keyboardState(from:)
.
-
Many
Emoji
functions and types are moved to the base library. -
Dictation.BarVisualizer
now applies more things with its style. -
Dictation.BarVisualizer
now applies style with the environment.
- Some themes have been adjusted to apply correct autocomplete toolbar styles.
Emoji
renames a lof of types & categories, and many things non-throwing.Emoji.Picker
has been deprecated in favor of the EmojiKit open-source view.LazyHGrid
/LazyVGrid
emoji initializers are replaced by the newEmoji.Grid
.KeyboardButton
has been deprecated and all views have been moved toKeyboard
.KeyboardStyle.AutocompleteToolbarItemBackground
is replaced byAutocomplete.ToolbarItem
.Autocomplete.ToolbarItem
nested views are replaced by just usingAutocomplete.ToolbarItem
.
This version optimizes the binary size of the KeyboardKit Pro framework.
- The framework size is now almost half in size compared to the 8.0 version.
- The
Color
extension changes in 8.3.1 are now implemented in Pro as well.
This version renames all colors to have more obvious naming.
Color
extensions now usekeyboard
as prefix instead ofstandard
.
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 newcapsLock
action.Keyboard.Case
has a newisCapsLocked
property.Keyboard.KeyboardType
has a newisAlphabeticCapsLocked
property.Keyboard.ReturnKeyType
has a newnativeType
property oniOS
.KeyboardLayout.ItemRow
has newhasKeyboardSwitcher
andsuggestedInputWidth
function.KeyboardLayout.ItemRows
has newhasKeyboardSwitcher
andinputWidth
function.KeyboardStyleProvider
has a newbuttonContentInsets
function.
iPadProKeyboardLayoutProvider
is a new layout provider for iPad Pro layouts.ProKeyboardLayoutProvider.spanish
now supports QWERTY, QWERTZ and AZERTY.
- The new
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 newcapsLock
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
.
SystemKeyboard
now only shows an emoji button if the license key unlocks the emoji keyboard.
This version adjusts localization and adds support for Inari Sámi and Northern Sámi.
SubmitLabel+CaseIterable
makes the type implementCaseIterable
.
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 fixes a configuration bug in KeyboardKit Pro, that caused autocorrect to not disable.
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 newAutocorrectionDisabledToContextModifer
modifier.AutocompleteContext
has a newisAutocorrectDisabled
property.LocaleDictionary
has new getters and setters.StandardCalloutActionProvider
has a newregisterLocalizedProvider
function.StandardKeyboardLayoutProvider
has a newregisterLocalizedProvider
function.View
has a newautocorrectionDisabled(with:)
modifier.
SystemKeyboard
now automatically honors any.autocorrectionDisabled()
that is applied above it.
LocalAutocompleteProvider
maxCount
is nowpublic
and mutable.LocalAutocompleteProvider
removes autocorrect suggestions if the context has autocorrect disabled.RemoteAutocompleteProvider
autocompleteSuggestions
is nowopen
.RemoteAutocompleteProvider
properties are nowpublic
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 toisAutocompleteEnabled
.
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 the performance of the KeyboardKit Pro license validation.
This patch reverts the dictation navigation change that was added to 8.0.7
.
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, staticallPredefined
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 nowIdentifiable
.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 thetoggleView
initializer in favor for the shortertoggle
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 newhostApplicationBundleId
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 makes the BaseKeyboardLayoutProvider
input set properties mutable.
This patch makes the LocalAutocompleteProvider
callout function open
instead of public
.
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.
This patch tweaks some migration guides before removing them in 8.1.
This patch moves emoji features from Emojis
(which was introduced in 8.0) to Emoji
after developer feedback that Emojis
was a strange prefix.
This patch makes some Pro views throwing instead of rendering empty content, since this was confusing. If you run into problems with this, just prefix your call with try?
.
- KeyboardKit Pro's text routing views no longer crashes in iOS 17 when full access is disabled.
EmojiCategory
initializers are now throwing.Emoji
skin tones are now throwing.Emoji.Version
functionality is now throwing.Emojis
is deprecated since all functionality is moved intoEmoji
.
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 astate
property.KeyboardInputViewController
has moved service properties into aservices
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 theemoji
keyboard key ifemojiKeyboard
is anEmptyView
.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 thetoolbar
builder.
InputSetBasedKeyboardLayoutProvider
is a new provider.KeyboardAction
now has astandardAccessibilityLabel
.KeyboardAction.emoji
can now be created with a string.KeyboardActionHandler
now handles autocomplete suggestions.KeyboardButton
now hasedgeInsets
and anisPressed
binding.KeyboardContext
has proxy properties that mirror the controller.KeyboardInputViewController
has a newsetupProError
property.KeyboardLayout.Item
has a newwidth(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 newemojiRegistration
property.StandardKeyboardActionHandler
has a newtryRegisterEmoji(after:on:)
.StandardKeyboardActionHandler
has a newtryPerformAutocomplete(after:on:)
.StandardKeyboardStyleProvider
now adjusts styles when a space drag is active.View.keyboardButton
supports custom insets and applies a menu tonextLocale
.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.
-
Many emoji types have become Pro features.
-
Many routing types have become Pro features.
-
The pro setup error view has been redesigned.
-
The pro setup error view now overlays your view.
-
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
autocorrectsi
toI
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.
-
All deprecated code has been removed.
-
DocC exposing types have been removed.
-
Many emoji types have been moved to Pro.
-
Many routing types have been moved to Pro.
-
English input sets have been moved to Pro.
-
Migration deprecations are not listed here.
-
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 (useString
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 (useString
extensions). -
KeyboardColor
has been made internal. -
KeyboardColorReader
has been removed (useColor
extensions). -
KeyboardContext
no longer has a controller-based init (usesync(with:)
). -
KeyboardContext
textDocumentProxy
is read-only, butoriginalTextDocumentProxy
can be set. -
KeyboardHostingController
has been made internal. -
KeyboardSettingsUrlProvider
has been removed (useURL.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 (useLocale
extensions). -
LocaleNameProvider
has been removed (useLocale
extensions). -
NextKeyboardController
has been made internal. -
QuotationAnalyzer
has been removed (useString
extensions). -
SentenceAnalyzer
has been removed (useString
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 anisPressed
parameter. -
WordAnalyzer
has been removed (useString
extensions).