KeyboardKit tries to honor semantic versioning:
- Only remove deprecated code in
majorversions. - Only deprecate code in
minorandpatchversions. - Avoid breaking changes in
minorandpatchversions. - Code can be marked as deprecated at any time.
Breaking changes can still occur in minor versions and patches, though, if the alternative is to not be able to release new critical features or fixes.
Non-functional releases, such as KeyboardKit Pro license releases, are not listed here.
Older versions are kept in the Release_Notes folder.
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.
SystemKeyboardButtonContentno longer applies aNextKeyboardButtonfor.nextKeyboard.StandardKeyboardActionHandlerno longer marks theinputViewControllerinitializer as convenience.View+KeyboardGesturesnow applies aNextKeyboardButtonfor.nextKeyboard.
This version adds more emoji versions.
EmojiVersionnow includes 13.1, 13.0, 12.1, 12.0 and 11.0.
This version improves the theme and dictation engines to make them easier to use.
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 will make it possible to implement features like marking a theme as a favorite, persist references instead of values etc. While it's not mandatory to specify an id when creating a theme, it is a mandatory property, which means that any previously encoded data will fail to decode.
If you have persisted KeyboardTheme values in your app, please reach out via info@getkeyboardkit.com and decode failure handling will be added to the library to handle any lacking IDs.
DictationContexthas a newappDeepLinkproperty.DictationContexthas a newsetup(with:)function.KeyboardActionnow usesperformDictationfor thedictationaction.KeyboardControllerhas a newperformDictationfunction.KeyboardEnabledLabelnow supports more styling.KeyboardInputViewControllerhas a newdictationConfigproperty.KeyboardInputViewControllerhas a newperformDictationfunction.KeyboardLayouthas a newbottomRowIndexproperty.KeyboardLayouthas a newbottomRowSystemItemsproperty.KeyboardLayouthas a newtryCreateBottomRowItem(for:)function.KeyboardSettingsLinknow supports custom labels.
KeyboardEnabledLabelno longer colors text by default.KeyboardInputViewControllernow changesprimaryLanguagewhen the context locale changes.KeyboardLocalehas new collection extension.
KeyboardThemeand all styles now have static IDs.KeyboardThemeand all styles have a newcopyfunction.KeyboardTheme.allPredefinedis now stored instead of computed.KeyboardTheme.standardis no longer throwing.KeyboardThemeButtonPreviewis a new preview.KeyboardThemeCopyableis a new protocol that specifies theme copy behavior.KeyboardThemeStyleVariationis a new protocol that can be used by theme styles.
ExternalAutocompleteProvideris renamed toRemoteAutocompleteProvider.ExternalAutocompleteResultis renamed toRemoteAutocompleteResult.FeatureToggle.Feature.newAutocompleteEngineis no longer used.KeyboardContext.tempIsPreviewModeis no longer used.KeyboardLocalesort with insert first parameter is replaced by atomic operations.StandardAutocompleteProvideris renamed toLocalAutocompleteProvider.
- Thanks to
@gonzalonuneztheKeyboardTextFieldandKeyboardTextViewnow disablescaptureTextFromCamera.
- Thanks to
@f-personsome documentation errors have been fixed.
DictationContext.lastAppGroupIdhas been removed.KeyboardTheme.allPredefinedis no longer throwing.
This release adds support for 🇰🇿 Kazakh and more locale and emoji features.
EmojiCategoryhas new emojis for iOS 16.4, macOS 13.3, tvOS 16.4 and watchOS 9.4.KeyboardReturnKeyTypehas newnextandsendcases.
- 🇰🇿 Kazakh (thanks to @mirasaujan)
KeyboardTheme.candyShophas a new.cuppyCakestyle.KeyboardTheme.standardhas new.green,.purpleand.yellowstyles.KeyboardTheme.minimalcan use all availableStandardStylestyle variations.KeyboardTheme.swiftycan use all availableStandardStylestyle variations.
KKL10nhas newnextandsendkeys.KeyboardLocale.armenianlocalizes more texts (thanks to @f-person).KeyboardLocale.englishadds localizations for all emojis.KeyboardLocale.russianlocalizes more texts (thanks to @f-person).
Emojicollections have a newallAvailableInSystemVersionthat can filter out unavailable emojis.EmojiVersionInfois a new type that contains information about when certain emojis were introduced.ProEmojiInfois deprecated in favor of just using the already definedEmojiextensions.KeyboardTheme.candyis renamed to.candyShop.KeyboardTheme.standardand.swiftynow applies a standard shadow.KeyboardThemeCandyStyleis renamed toCandyShopStyle.KeyboardThemeSwiftyStyledeprecated in favor of reusingStandardStyle.
KeyboardAction.ReturnTypeis renamed toKeyboardReturnKeyType.KeyboardActionMappableis deprecated.
ActionCalloutnow handles single actions.- Some incorrect blue square emojis have been corrected.
This release adds more name and sorting capabilities to the locale types.
KeyboardContexthas new locale setter functions.KeyboardLocalehas newsortedby name functions.Localehas newlocalizedNameandsortedby name functions.LocaleDirectionProvideris a new protocol that exposesLocaleextensions to DocC.LocaleNameProvideris a new protocol that exposesLocalename extensions to DocC.
Localeno longer capitalizeslocalizedNameorlocalizedLanguageName.LocalelocalizedNameandlocalizedLanguageNameare no longer optional.LocaleContextMenuno logner sorts the keyboard context locales collection.
- Some
KeyboardLocaleextensions that used the native locale have been deprecated. - Some
Localelocalization extensions were redundant and have been deprecated.
This version adds a first PREVIEW of dictation support. It's a very early version that is not yet tested, but your feedback is very important.
This version keeps the experimental flag for the recently introduced autocomplete provider, until the next minor version. Make sure to test it and provide feedback.
This version adds a bunch of new keyboard themes with new style variations. This means that you can easily tweak a theme-specific set of parameters for the various themes.
This version introduces breaking changes with reference to "Breaking changes can still occur in minor versions and patches...". In this case, the benefits are massive since it lets us make many more types Codable and Equatable, which unlocks a bunch of capabilities.
This requires that the types can't contain non-codable types, such as Image or Font, which requires breaking changes to the current setup. Types that have Image properties will instead use raw Data, while types that have Font properties will use a new KeyboardFont property. KeyboardFont can be created in the same way as Font but if you want to use it with a SwiftUI view modifier, you have to use .font(font.font).
Just reach out if these breaking changes cause problems.
Dictationis a new namespace with PREVIEW types that defines how to perform keyboard dictation.KeyboardBackgroundStylehas a new convenience initializer.KeyboardBackgroundTypehas a new.clearand.verticalGradienttype.KeyboardBackgroundTypeis extracted fromKeyboardBackgroundStyle.BackgroundType.KeyboardFontis a newCodabletype that is used to make various styles codable as well.KeyboardFontTypeis a newCodabletype that is used to make various styles codable as well.KeyboardFontWeightis a newCodabletype that is used to make various styles codable as well.KeyboardInputViewControllerhas adictationContextthat can be used to manage and observe dictation state.KeyboardInputViewControllerhas adictationServicethat can be used to start dictation from your keyboard.KeyboardInputViewControllerhas re-added the oldhostBundleIdproperty, which can be used to get the ID of the parent app.
KeyboardThemehas a newstyleNameproperty.KeyboardThemecan now support style variations.KeyboardThemehas many new themes with style variations.KeyboardThemehas a newgroupedfunction that groups themes into named collections.KeyboardThemeCollectionis a new type that can be used to group themes into named collections.PreviousAppNavigatoris a new protocol that can be used to navigate back to the recently open app.StandardDictationServiceis a new service that can be used to perform dictation within an app target.StandardKeyboardDictationServiceis a new service that can be used to start dictation from a keyboard extension.
The following types are now Codable and Equatable:
AutocompleteToolbarStyleAutocompleteToolbarItemStyleAutocompleteToolbarItemBackgroundStyleKeyboardActionCalloutStyleKeyboardInputCalloutStyleKeyboardBackgroundStyleKeyboardBackgroundTypeKeyboardButtonStyleKeyboardButtonShadowStyleKeyboardCalloutStyleKeyboardInputCalloutStyleKeyboardTheme
KeyboardTheme.cottonCandyhas been renamed toKeyboardTheme.candy(.cottonCandy).KeyboardTheme.neonNightshas been renamed toKeyboardTheme.neon(.night).
AutocompleteToolbarItemStylefonts are now of typeKeyboardFontStyle.KeyboardBackgroundTypeno longer has a.linearGradienttype.KeyboardBackgroundTypenow requiresDatafor.imageinstead of a SwiftUIImage.KeyboardActionCalloutStylefontis now of typeKeyboardFontStyle.KeyboardInputCalloutStylecalloutPaddingis now of typeCGFloat.KeyboardInputCalloutStylefontis now of typeKeyboardFontStyle.KeyboardThemeno longer defines insets, but will instead make the bottom shadow fit the screen.LicenseTierhas removed thekkname prefix and thecom.keyboardkit.ID prefix.
- The new, experimental autocomplete provider fixes a localization sync bug.
- The pressed system keyboard button color overlay is now clipped to the button corner radius.
- The
isAutoCapitalizationEnabledflag no longer affects automatic downshifting when typing.
This version focuses on making it easier to style keyboards.
This version adds a theme engine to KeyboardKit Pro. The new KeyboardThemeAppearance can be used with the new KeyboardTheme to style keyboards with themes, which is a lot easier than defining custom appearances.
This version comes with three themes - .cottonCandy, .neonNights and .tron. You can use them in your own keyboads, or tweak them to create your own visual styles. More themes are coming in future versions.
Due to a bug found in the new autocomplete provider, the old StandardAutocompleteProvider will be replaced in the next minor version.
AutocompleteContexthas a newisEnabledproperty that can be used to disable autocomplete.KeyboardAppearancehas a newautocompleteToolbarStyleproperty.KeyboardAppearancehas a newkeyboardBackgroundproperty.KeyboardBackgroundStyleis a new style that can be used to the background of a keyboard.KeyboardButtonStyleproperties are now optional to allow for overrides.KeyboardButtonStylehas a newpressedOverlayColorproperty that can be used to highlight buttons.KeyboardButtonStylehas a newextended(with:)function to let you extend a style with another style.View+SystemKeyboardButtonhas a newisPressedparameter to let you define pressed state.
KeyboardInputViewControllerwill use the new autocomplete context property to disable autocomplete if needed.KeyboardThemeis a new type that can be used to define keyboard themes.KeyboardThemeAppearanceis a new appearance that can be used withKeyboardTheme.- The new
LocalAutocompleteProviderthat was introduced in 7.1 has been made public. - The new
LocalAutocompleteProvidernow ignores empty strings when wrapping in quotes. - The new
LocalAutocompleteProvidernow replaces hyphens with space when suggesting splitting up the word. - The incorrect Brazilian callout actions have been corrected.
KeyboardTheme.cottonCandyis a pink and blue trip to fluffy delight.KeyboardTheme.neonNightsis a metropolitian color explosion.KeyboardTheme.tronis a black and blue, digital adrenaline rush.
SystemKeyboarduses the new appearance background and autocomplete toolbar styles.
CalloutStylehas been renamed toKeyboardCalloutStyle.ActionCalloutStylehas been renamed toKeyboardActionCalloutStyle.InputCalloutStylehas been renamed toKeyboardInputCalloutStyle.
This version adds an isKeyboardFloating property to the keyboard context. It's currently not used to change the visual representation of floating keyboards, but please verify that it works as expected.
KeyboardContexthas a newisKeyboardFloatingproperty that can be used to determine if the keyboard is floating.
GestureButtonDefaultshave adjustedrepeatDelayto0.5.
KeyboardLayoutConfigurationnow applies Pro Max configuration to iPhone 14 Pro Max.SystemKeyboardwill now show autocomplete in Twitter and Mastodon.View+KeyboardGestureswill now trigger repeating actions like backspace more like the native keyboards.
This version fixes some bugs in KeyboardTextField and KeyboardTextView and tweaks their behavior a bit.
The demo app has a new KeyboardTextInput demo keyboard that shows KeyboardTextField and KeyboardTextView in action.
KeyboardInputViewis a new protocol that lets you apply afocusedbinding together with a custom done button.
KeyboardTextFieldandKeyboardTextViewnow implement the newKeyboardInputViewprotocol.KeyboardTextFieldandKeyboardTextViewnow apply a basic style before applying any custom configuration.KeyboardTextFieldandKeyboardTextViewnow animates together with the focused state.KeyboardTextFieldnow applies a background color and border style.KeyboardTextViewnow applies a background color, corner radius and font.KeyboardTextViewnow uses the same font asKeyboardTextFieldby default.
KeyboardTextFieldandKeyboardTextViewnow correctly resigns as first responder when they lose focus.
This version fixes some bugs and makes it even easier to setup KeyboardKit.
KeyboardKit Pro also has a new experimental and much better autocomplete provider that you can toggle on with the FeatureToggle:
FeatureToggle.shared.toggleFeature(.newAutocompleteEngine, .on)Once this has been verified to work better than the current provider, it will replace it and this feature toggle flag will be removed.
Furthermore, the locale context menu has been refactored to work and look a lot better on iOS 16 and macOS 12. This unfortunately required a few breaking api changes, that hopefully will not affect anyone.
FeatureTogglehas a new.newAutocompleteEnginefeature.KeyboardContexthas a newlocalePresentationLocaleproperty.KeyboardInputViewControllerhas newsetupfunctions that provide a view builder with an unowned controller reference.QuotationAnalyzerhas more functions.Stringhas new quotation functions.
- KeyboardKit Pro has a new experimental autocomplete provider that can be toggled on to replace the standard one.
- Many iPad layouts have been tweaked to look even closer to the native layouts.
KeyboardInputViewControllersetupuses a view builder instead of a static view.KeyboardInputViewControllernow callsviewWillSetupKeyboardinviewWillAppearinstead ofviewDidLoad.KeyboardRootViewuses a view builder instead of a static view.
iPadKeyboardLayoutProviderhad a line accidentally removed, which caused English layouts to render incorrect. This has been fixed.KeyboardInputViewControllernow creates the keyboard view later, which makes it respect the safe areas better in landscape.LocaleContextMenunow uses theKeyboardContextto localize and sort locales.
SpaceLongPressBehaviorcases have been renamed to read better. This should hopefully affect few people.
KeyboardKit 7.0 involves a major rewrite that aims to bring more consistency in naming and structure and to streamline the library to make future development easier. It bumps the platform deployment targets to iOS 14, macOS 11, tvOS 14 and watchOS 7 and removes all previously deprecated code and todos.
Although KeyboardKit 7.0 aims to introduce as few breaking changes as possible, there are some surface level APIs that will change. Some such changes are the removal of many shared instances and how more dependencies have to be passed in as parameters. If you are using the now removed shared instances, simply inject the instance as initializer or function parameter instead.
KeyboardKit 7.0 makes the SystemKeyboard easier to use, where it now adds an autocomplete toolbar by default to make sure that the callouts has enough space, and to reduce the risk of memory leaks that was previously easy to add by accident when you connected the toolbar to the keyboard input controller's autocomplete function. If your keyboard uses a custom autocomplete toolbar, you must pass in autocompleteToolbar: none in the system keyboard initializer.
If you have problems upgrading to 7.0, first try upgrading to 6.9. It has a lot of deprecations in place to provide guidance. You may still experience breaking changes after that, but they will be fewer.
AutocompleteContexthas a newresetfunction.AutocompleteToolbaris now available on all platforms.EmojiAnalyzeris a new protocol that mergesEmojiCharacterAnalyzerandEmojiStringAnalyzer.EmojiCategoryKeyboardis now available on all platforms.EmojiCategoryKeyboardMenuis now available on all platforms.EmojiCategoryTitleis now available on all platforms.EmojiKeyboardis now available on all platforms.EmojiKeyboardStylehas new context-based standard functions.ExternalKeyboardContextis now available on macOS and tvOS as well.GestureButtonis now available on watchOS 7.Image.keyboardEmojiSymbolprovides the old emoji keyboard button icon.InterfaceOrientationhas a newlandscapecase.KeyboardActiongesture actions are now available on all platforms.KeyboardActiongesture actions now use aKeyboardControllerinstead of aKeyboardInputViewController.KeyboardAppearancewill now apply to.nextKeyboardas well.KeyboardCalloutContextis a new context that lets lets us pass around a single context for input and action callouts.KeyboardCharacterProvideris a new protocol that provides keyboard-specific characters.KeyboardControlleris a new protocol that lets us decouple actions from the input view controller.KeyboardContexthas a newkeyboardLocaleand new functions for setting locale and keyboard type.KeyboardContexthas a newspaceLongPressBehaviorproperty to control the space button's behavior.KeyboardInputViewControllerhas a newcalloutContext.KeyboardInputViewControllerimplementsKeyboardControllerwhich gives it a bunch of new functions.KeyboardLocaleimplementsLocaleFlagProvider.KeyboardLocalehas newLocalematching extensions.KeyboardTypehas new properties.KeyboardLayoutConfigurationhas adjusted the standard corner radius for iPhone buttons.Localehas new localized name extensions.Localehas newKeyboardLocalematching extensions.LocaleContextMenunow lets you customize the presentaiton locale.NextKeyboardButtonnow supports using any custom content.NextKeyboardControlleris used instead of the shared controller.QuotationAnalyzeris a new protocol for analyzing quotations in strings.ScrollViewGestureButtonis now available on watchOS 7.SpaceCursorDragGestureHandleris now available on all platforms.SpaceLongPressBehavioris a new enum that defined the available space long press behaviors.Stringhas new casing, keyboard character, quotation, word and sentence extensions.SystemKeyboardwill now add an autocomplete toolbar by default.SystemKeyboardButtonis now available on all platforms.Textis a new namespace for text analysis.UITextDocumentProxyquotation utilities is now available asStringQuotationAnalyzer.
FeedbackToggleis a new button to toggle audio and haptic feedback.AudioFeedbackToggleButtonhas been replaced withFeedbackToggle.HapticFeedbackToggleButtonhas been replaced withFeedbackToggle.
ActionCalloutis no longer greedy.CalloutStylehas a new standard corner radius.InputCalloutis no longer greedy.InterfaceOrientation.currentnow returns correct rotations on all platforms.iPadKeyboardLayoutProviderhas been greatly simplified.iPhoneKeyboardLayoutProviderhas been greatly simplified.Image.keyboardEmojiis looks closer to the native icon.KeyboardAction.backspacenow triggers on.pressinstead of.release.KeyboardLayoutConfigurationnow behaves the same on all platforms.KeyboardSettingsLinkhas ben rewritten to only use plain SwiftUI code that works with extensions as well.StandardKeyboardAppearancenow applies medium font weights to the Gregorian ABC keyboard.
- All deprecated code has been removed.
- The library now targets iOS 14, macOS 11, tvOS 14 and watchOS 7.
ActionCalloutContext.sharedhas been removed.AutocompleteSuggestionsis now a struct instead of a protocol.AutocompleteToolbarstandard actions have been removed.AutocompleteToolbarReplacementActionhas been renamed toSuggestionAction.AutocompleteToolbarIteminit parameters have been reordered.AutocompleteToolbarItemTitleinit parameters have been reordered.DeleteBackwardRangecharhas been renamed tocharacter.EmojiCategoryKeyboardinit parameters have been refactored.EmojiCategoryKeyboardMenuinit parameters have been reordered.EmojiCharacterAnalyzerandEmojiStringAnalyzerhave been merged intoEmojiAnalyzer.EmojiKeyboardinit parameters have been refactored.InputCalloutContext.sharedhas been removed.InputSethas been converted to aprotocoland all input set types converted fromclasstostruct.KeyboardAction.returnand.newLinehave been replaced byprimaryvariants.KeyboardAction.shiftcurrentStateis renamed tocurrentCasing.KeyboardActionstandardTextDocumentProxyActionhas been removed.KeyboardAppearancecallout styles have been converted to properties.KeyboardContextoriginalTextDocumentProxyhas been renamed tomainTextDocumentProxy.KeyboardGesture.taphas been replaced by.release.KeyboardInputViewControllerhas replacedactionCalloutContextandinputCalloutContextwith a singlecalloutContext.KeyboardInputViewController.sharedhas been removed.KeyboardInputViewControlleroriginalTextDocumentProxyhas been renamed tomainTextDocumentProxy.KeyboardLayoutConfigurationportrait configurations have been renamed.KeyboardReturnActionMappablehas been refactored toKeyboardActionMappable.KeyboardTextFieldnow requires an keyboard input view controller.KeyboardTextViewnow requires an keyboard input view controller.KeyboardTypehas made theisAlphabetic(with:)parameter implicit.LocaleregionIdentifierhas been removed.LocaleProviderhas been removed.LocaleFlagProvideris now only implemented byLocaleon iOS 16.StandardAutocompleteSuggestionshas been renamed toAutocompleteSuggestions.StandardKeyboardActionHandlernow requires aKeyboardController.StandardKeyboardActionHandlerinputViewControllerinitializer is now a convenience initializer.StandardKeyboardActionHandlerchangeKeyboardTypeActionhas been removed.StringCasingAnalyzerhas been renamed toCasingAnalyzer.StringCasingAnalyzerhas replaced properties with functions.SystemKeyboardinit parameters have been refactored.SystemKeyboardstandardKeyboardWidthhas been removed.SystemKeyboardActionButtonhas been renamed toSystemKeyboardButtonand requires a callout context.SystemKeyboardActionButtonContenthas been renamed toSystemKeyboardButtonContent.SystemKeyboardButtonhas been replaced by the renamed action button.SystemKeyboardButtonRowItemnow requires a callout context.UITextDocumentProxyisOpenQuotationBeforeInputhas been renamed tohasUnclosedQuotationBeforeInput.UITextDocumentProxyisOpenAlternateQuotationBeforeInputhas been renamed tohasUnclosedAlternateQuotationBeforeInput.UITextDocumentProxypreferredReplacementis renamed topreferredQuotationReplacement.View.keyboardGesturesnow requires a callout context.
