Releases: KeyboardKit/KeyboardKitPro
8.9.5
This version adjusts Pro licenses.
8.9.4
This version adjusts some Pro licenses.
8.9.3
This version adjusts the access scope for Pro callout and layout services.
🐛 Bug Fixes
CalloutService.ProService
and all localized services are now properly open to inheritance.KeyboardLayoutService.ProService
and all localized services are now properly open to inheritance.
8.9.2
This version adds more KeyboardKit Pro shorthands, to make it even easier to initialize Pro services.
⚡️ Shorthands (Pro)
CalloutService
can resolve pro services with.localized(...)
. e.g..localized(.Albanian())
KeyboardLayoutService
can resolve pro services with.localized(...)
. e.g..localized(.Albanian())
8.9.1
This version fixes a few bugs.
The keyboard button gestures bug fix results in one less observable state.
🐛 Bug Fixes
Keyboard.Services
.tryRegisterLocalizedLayoutService
now expects the correct argument type.- The
.keyboardButtonGestures
modifier now correctly ignores secondary actions for cancelled gestures.
🗑️ Deprecations & Renamings
CalloutContext.ActionContext
endDragGesture()
has been replaced byhandleSelectedAction()
.
8.9.0
This version adds a new Keyboard.NumberPad
component, next character prediction-based tap area sizes, and a KeyboardThemeContext
that let you persist themes. It also adds service shorthands, so that you can type .standard(...)
instead of KeyboardAction.StandardHandler(...)
.
This version also continues to rename types to make things more consistent. This means that are now many deprecations, which may be confusing, but it's all in service for a clean 9.0 transition.
🛠️ Xcode 16
KeyboardKit and KeyboardKit Pro are now built with Xcode 16, using the Swift 6 compiler.
‼️ New ways to set up KeyboardKit!
This version lets you use a KeyboardApp
to set up your keyboard extension, and separates setting up the keyboard from setting up the keyboard view.
You can now call setup(for:)
(or setupPro(for:completion:)
for KeyboardKit Pro) in viewDidLoad()
, to set up App Group syncing, dictation, register your KeyboardKit Pro license key, etc., then use setupKeyboardView(_:)
in viewWillSetupKeyboardView()
.
This change means that you can set up KeyboardKit and KeyboardKit Pro earlier, and that setting up the view is identical for both SDKs. As a bonus, we can add more information to the KeyboardApp
over time, to let the setup function do more than it does today.
🧪 Experiments
The two experimental modes for the next keyboard button have been reported to work well, and are now enabled by default:
Keyboard.NextKeyboardButtonControllerMode.current
now uses.experimentalNilTarget
Keyboard.NextKeyboardButtonProxyMode.current
now uses.experimental
If you experiment any problems with these new experimental modes, you can set each to .classic
to revert back. Make sure to report any problems, since these experimental modes are planned to replace the classic modes in KeyboardKit 9.0.
✨ Features
AutocompleteContext
has newnextCharacterPrediction(for:)
functions.DictationContext
can now be set up for aKeyboardApp
.Image
has a newkeyboardTheme
image value.Keyboard.NumberPad
is a new keyboard component.Keyboard.State
has a newthemeContext
property.Keyboard.Services
has a newtryRegisterLocalizedCalloutService
function.Keyboard.Services
has a newtryRegisterLocalizedLayoutService
function.KeyboardApp
has newdeepLinks
andkeyboardBundleId
properties.KeyboardCalloutService
has a newtryRegisterLocalizedService
function.KeyboardController
has a newsetup(for:)
to setup the keyboad for aKeyboardApp
.KeyboardInputController
can now be set up for aKeyboardApp
.KeyboardLayoutService
has a newtryRegisterLocalizedService
function.KeyboardSettings
can now be set up for aKeyboardApp
.KeyboardView
now applies next character probabilities to its items.KeyboardThemeContext
is a new context type for theme-related state.View+KeyboardButton
now supports applying extended tap areas to more probable keys.
👑 Pro Features
KeyboardApp.HomeScreen
can now opt-in to link to the themes screen.KeyboardApp.ThemeScreen
is a new screen that can be used as a theme picker.
💡 Adjustments
Color
andImage
extensions have been moved to theStyling
namespace.KeyboardAction.StandardHandler
improves auto-ignore to behave better.KeyboardApp
marks the old initializer as@_disfavoredOverload
.KeyboardContext
no longer syncs keyboard type for the same value.KeyboardContext
now starts withKeyboardType.alphabetic(.auto)
.KeyboardInputViewController.host
now handles the host bundle ID within the main app.KeyboardView
will show aKeyboard.NumberPad
if the.keyboardStyle
is.numberPad
.
⚡️ Shorthands
Autocomplete.DisabledService
can be resolved with.disabled(...)
.Callouts.DisabledService
can be resolved with.disabled
.Callouts.StandardService
can be resolved with.standard(...)
.Dictation.DisabledService
can be resolved with.disabled
.Dictation.DisabledKeyboardService
can be resolved with.disabled(...)
.Feedback.DisabledService
can be resolved with.disabled
.Feedback.StandardService
can be resolved with.standard
.Gestures.SpaceDragGestureHandler
can be resolved with.spaceDrag
.KeyboardAction.StandardHandler
can be resolved with.standard(...)
.KeyboardLayout.DisabledService
can be resolved with.disabled
.KeyboardLayout.StandardService
can be resolved with.standard(...)
.KeyboardStyle.StandardService
can be resolved with.standard(...)
.
⚡️ Shorthands (KeyboardKit Pro)
Autocomplete.LocalService
can be resolved with.local(...)
.Autocomplete.RemoteService
can be resolved with.remote(...)
.Callouts.ProService.<Locale>
can be resolved with.<locale>
.Dictation.ProService
can be resolved with.pro(...)
.Dictation.ProKeyboardService
can be resolved with.proInKeyboard(...)
and.proInApp(...)
.KeyboardLayout.ProService.<Locale>
can be resolved with.<locale>(...)
.KeyboardStyleService.ThemeBased
can be resolved with.themeBased(...)
.
📖 Documentation
- The documentation has been adjusted for Xcode 16.
🐛 Bug Fixes
- This protect against an undefined key error when instantiating a KeyboardInputViewController in an app.
🗑️ Deprecations & Renamings
KeyboardController
setup(with:)
has been renamed tosetupKeyboardView(_:)
.KeyboardController
viewWillSetupKeyboard()
has been renamed toviewWillSetupKeyboardView()
.KeyboardStyleProvider
and its related types are renamed toKeyboardStyleService
.
8.8.9
📱 Important iOS 18 update
This version builds KeyboardKit Pro with Xcode 16 and Swift 6, to make the EmojiKeyboard
scrolling work in iOS 18.
Important
The bug fix requires that the code is compiled with the Swift 6 compiler, so it had to be built with Xcode 16. If not, the scroll gesture in the emoji keyboard doesn't work, which you can experience in 8.8.8
and even in earlier versions. This means that you must use Xcode 16 from now on. Please reach out if you can't use Xcode 16, and need an Xcode 15 workaround.
8.9-rc.2
This version continues to rename types to make things more consistent. This means that are now many deprecations in KeyboardKit 8.9, which may be confusing, but it's all in service for a clean 9.0 transition.
This version now lets you set up your keyboard extension with a KeyboardApp
, and separates setting up the keyboard from setting up the keyboard view. See below for important information about this transition.
This version adds a new Keyboard.NumberPad
, prediction-based tap areas for keyboard keys, and a new KeyboardThemeContext
to let you easily persist themes. It also adds service shorthands to easier refer to services. For instance, instead of KeyboardAction.StandardHandler(...)
, you can just type .standard(...)
.
‼️ Set up changes
This version lets you use a KeyboardApp
to set up your keyboard extension, and separates setting up the keyboard from setting up the keyboard view. This makes KeyboardKit and KeyboardKit Pro behave more alike, where just the setup/setupPro
differs.
You can now call setup(for:)
(or setupPro(for:completion:)
for KeyboardKit Pro) in viewDidLoad()
to set up things like App Group syncing, register your license key, etc. with a KeyboardApp
value, then use the new setupKeyboardView(_:)
to set up a custom keyboard view in both KeyboardKit or KeyboardKit Pro.
✨ Features
AutocompleteContext
has newnextCharacterPrediction(for:)
functions.DictationContext
can now be set up for aKeyboardApp
.Image
has a newkeyboardTheme
image value.Keyboard.NumberPad
is a new number pad component.Keyboard.State
has a newthemeContext
property.Keyboard.Services
has a newtryRegisterLocalizedCalloutService
function.Keyboard.Services
has a newtryRegisterLocalizedLayoutService
function.KeyboardApp
has newdeepLinks
andkeyboardBundleId
properties.KeyboardCalloutService
has a newtryRegisterLocalizedService
function.KeyboardContext
no longer syncs keyboard type for the same value.KeyboardContext
now starts withKeyboardType.alphabetic(.auto)
.KeyboardController
has a newsetup(for:)
to setup the keyboad for aKeyboardApp
.KeyboardInputController
can now be set up for aKeyboardApp
.KeyboardLayoutService
has a newtryRegisterLocalizedService
function.KeyboardSettings
can now be set up for aKeyboardApp
.KeyboardView
now applies next character probabilities to its items.KeyboardThemeContext
is a new context type for theme-related state.View+KeyboardButton
now supports applying extended tap areas to more probable keys.
👑 Pro Features
KeyboardApp.HomeScreen
can now opt-in to link to the themes screen.KeyboardApp.ThemeScreen
is a new screen that can be used as a theme picker.
💡 Adjustments
Color
andImage
extensions have been moved to theStyling
namespace.KeyboardAction.StandardHandler
improves auto-ignore to behave better.KeyboardApp
marks the old initializer as@_disfavoredOverload
.KeyboardContext
no longer syncs keyboard type for the same value.KeyboardContext
now starts withKeyboardType.alphabetic(.auto)
.KeyboardInputViewController.host
now handles the host bundle ID within the main app.KeyboardView
will show aKeyboard.NumberPad
if the.keyboardStyle
is.numberPad
.
⚡️ Shorthands
Autocomplete.DisabledService
can be resolved with.disabled(...)
.Callouts.DisabledService
can be resolved with.disabled
.Callouts.StandardService
can be resolved with.standard(...)
.Dictation.DisabledService
can be resolved with.disabled
.Dictation.DisabledKeyboardService
can be resolved with.disabled(...)
.Feedback.DisabledService
can be resolved with.disabled
.Feedback.StandardService
can be resolved with.standard
.Gestures.SpaceDragGestureHandler
can be resolved with.spaceDrag
.KeyboardAction.StandardHandler
can be resolved with.standard(...)
.KeyboardLayout.DisabledService
can be resolved with.disabled
.KeyboardLayout.StandardService
can be resolved with.standard(...)
.KeyboardStyle.StandardService
can be resolved with.standard(...)
.
⚡️ Shorthands (KeyboardKit Pro)
Autocomplete.LocalService
can be resolved with.local(...)
.Autocomplete.RemoteService
can be resolved with.remote(...)
.Callouts.ProService.<Locale>
can be resolved with.<locale>
.Dictation.ProService
can be resolved with.pro(...)
.Dictation.ProKeyboardService
can be resolved with.proInKeyboard(...)
and.proInApp(...)
.KeyboardLayout.ProService.<Locale>
can be resolved with.<locale>(...)
.KeyboardStyleService.ThemeBased
can be resolved with.themeBased(...)
.
📖 Documentation
- The documentation has been adjusted for Xcode 16.
🐛 Bug Fixes
- This protect against an undefined key error when instantiating a KeyboardInputViewController in an app.
🗑️ Deprecations & Renamings
KeyboardController
setup(with:)
has been renamed tosetupKeyboardView(_:)
.KeyboardController
viewWillSetupKeyboard()
has been renamed toviewWillSetupKeyboardView()
.KeyboardStyleProvider
and its related types are renamed toKeyboardStyleService
.
8.8.8
This version makes Keyboard.Services
sync service changes to the action handler, if possible.
8.9-rc.1
This version continues to rename types to make things more consistent. This means that are now many deprecations in KeyboardKit 8.9, which may be confusing, but it's all in service for a clean 9.0 transition.
This version now lets you set up your keyboard extension with a KeyboardApp
, and separates setting up the keyboard from setting up the keyboard view. See below for important information about this transition.
This version adds a new Keyboard.NumberPad
, prediction-based tap areas for keyboard keys, and a new KeyboardThemeContext
to let you easily persist themes. It also adds service shorthands to easier refer to services. For instance, instead of KeyboardAction.StandardHandler(...)
, you can just type .standard(...)
.
‼️ Set up changes
This version lets you use a KeyboardApp
to set up your keyboard extension, and separates setting up the keyboard from setting up the keyboard view. This makes KeyboardKit and KeyboardKit Pro behave more alike, where just the setup/setupPro
differs.
You can now call setup(for:)
(or setupPro(for:completion:)
for KeyboardKit Pro) in viewDidLoad()
to set up things like App Group syncing, register your license key, etc. with a KeyboardApp
value, then use the new setupKeyboardView(_:)
to set up a custom keyboard view in both KeyboardKit or KeyboardKit Pro.
✨ Features
AutocompleteContext
has newnextCharacterPrediction(for:)
functions.DictationContext
can now be set up for aKeyboardApp
.Image
has a newkeyboardTheme
image value.Keyboard.NumberPad
is a new number pad component.Keyboard.State
has a newthemeContext
property.Keyboard.Services
has a newtryRegisterLocalizedCalloutService
function.Keyboard.Services
has a newtryRegisterLocalizedLayoutService
function.KeyboardApp
has newdeepLinks
andkeyboardBundleId
properties.KeyboardCalloutService
has a newtryRegisterLocalizedService
function.KeyboardContext
no longer syncs keyboard type for the same value.KeyboardContext
now starts withKeyboardType.alphabetic(.auto)
.KeyboardController
has a newsetup(for:)
to setup the keyboad for aKeyboardApp
.KeyboardInputController
can now be set up for aKeyboardApp
.KeyboardLayoutService
has a newtryRegisterLocalizedService
function.KeyboardSettings
can now be set up for aKeyboardApp
.KeyboardView
now applies next character probabilities to its items.KeyboardThemeContext
is a new context type for theme-related state.View+KeyboardButton
now supports applying extended tap areas to more probable keys.
👑 Pro Features
KeyboardApp.HomeScreen
can now opt-in to link to the themes screen.KeyboardApp.ThemeScreen
is a new screen that can be used as a theme picker.
💡 Adjustments
Color
andImage
extensions have been moved to theStyling
namespace.KeyboardInputViewController.host
now handles the host bundle ID within the main app.KeyboardView
will show aKeyboard.NumberPad
if the.keyboardStyle
is.numberPad
.
⚡️ Shorthands
Autocomplete.DisabledService
can be resolved with.disabled(...)
.Callouts.DisabledService
can be resolved with.disabled
.Callouts.StandardService
can be resolved with.standard(...)
.Dictation.DisabledService
can be resolved with.disabled
.Dictation.DisabledKeyboardService
can be resolved with.disabled(...)
.Feedback.DisabledService
can be resolved with.disabled
.Feedback.StandardService
can be resolved with.standard
.Gestures.SpaceDragGestureHandler
can be resolved with.spaceDrag
.KeyboardAction.StandardHandler
can be resolved with.standard(...)
.KeyboardLayout.DisabledService
can be resolved with.disabled
.KeyboardLayout.StandardService
can be resolved with.standard(...)
.KeyboardStyle.StandardService
can be resolved with.standard(...)
.
⚡️ Shorthands (KeyboardKit Pro)
Autocomplete.LocalService
can be resolved with.local(...)
.Autocomplete.RemoteService
can be resolved with.remote(...)
.Callouts.ProService.<Locale>
can be resolved with.<locale>
.Dictation.ProService
can be resolved with.pro(...)
.Dictation.ProKeyboardService
can be resolved with.proInKeyboard(...)
and.proInApp(...)
.KeyboardLayout.ProService.<Locale>
can be resolved with.<locale>(...)
.KeyboardStyleService.ThemeBased
can be resolved with.themeBased(...)
.
📖 Documentation
- The documentation has been adjusted for Xcode 16.
🐛 Bug Fixes
- This protect against an undefined key error when instantiating a KeyboardInputViewController in an app.
🗑️ Deprecations & Renamings
KeyboardController
setup(with:)
has been renamed tosetupKeyboardView(_:)
.KeyboardController
viewWillSetupKeyboard()
has been renamed toviewWillSetupKeyboardView()
.KeyboardStyleProvider
and its related types are renamed toKeyboardStyleService
.