Skip to content

Releases: KeyboardKit/KeyboardKitPro

8.9.5

23 Oct 15:16
Compare
Choose a tag to compare

This version adjusts Pro licenses.

8.9.4

11 Oct 10:03
Compare
Choose a tag to compare

This version adjusts some Pro licenses.

8.9.3

03 Oct 17:46
Compare
Choose a tag to compare

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

02 Oct 16:00
Compare
Choose a tag to compare

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

30 Sep 19:02
Compare
Choose a tag to compare

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 by handleSelectedAction().

8.9.0

27 Sep 12:50
Compare
Choose a tag to compare

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 new nextCharacterPrediction(for:) functions.
  • DictationContext can now be set up for a KeyboardApp.
  • Image has a new keyboardTheme image value.
  • Keyboard.NumberPad is a new keyboard component.
  • Keyboard.State has a new themeContext property.
  • Keyboard.Services has a new tryRegisterLocalizedCalloutService function.
  • Keyboard.Services has a new tryRegisterLocalizedLayoutService function.
  • KeyboardApp has new deepLinks and keyboardBundleId properties.
  • KeyboardCalloutService has a new tryRegisterLocalizedService function.
  • KeyboardController has a new setup(for:) to setup the keyboad for a KeyboardApp.
  • KeyboardInputController can now be set up for a KeyboardApp.
  • KeyboardLayoutService has a new tryRegisterLocalizedService function.
  • KeyboardSettings can now be set up for a KeyboardApp.
  • 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 and Image extensions have been moved to the Styling 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 with KeyboardType.alphabetic(.auto).
  • KeyboardInputViewController.host now handles the host bundle ID within the main app.
  • KeyboardView will show a Keyboard.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 to setupKeyboardView(_:).
  • KeyboardController viewWillSetupKeyboard() has been renamed to viewWillSetupKeyboardView().
  • KeyboardStyleProvider and its related types are renamed to KeyboardStyleService.

8.8.9

24 Sep 16:17
Compare
Choose a tag to compare

📱 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

24 Sep 18:30
Compare
Choose a tag to compare

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 new nextCharacterPrediction(for:) functions.
  • DictationContext can now be set up for a KeyboardApp.
  • Image has a new keyboardTheme image value.
  • Keyboard.NumberPad is a new number pad component.
  • Keyboard.State has a new themeContext property.
  • Keyboard.Services has a new tryRegisterLocalizedCalloutService function.
  • Keyboard.Services has a new tryRegisterLocalizedLayoutService function.
  • KeyboardApp has new deepLinks and keyboardBundleId properties.
  • KeyboardCalloutService has a new tryRegisterLocalizedService function.
  • KeyboardContext no longer syncs keyboard type for the same value.
  • KeyboardContext now starts with KeyboardType.alphabetic(.auto).
  • KeyboardController has a new setup(for:) to setup the keyboad for a KeyboardApp.
  • KeyboardInputController can now be set up for a KeyboardApp.
  • KeyboardLayoutService has a new tryRegisterLocalizedService function.
  • KeyboardSettings can now be set up for a KeyboardApp.
  • 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 and Image extensions have been moved to the Styling 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 with KeyboardType.alphabetic(.auto).
  • KeyboardInputViewController.host now handles the host bundle ID within the main app.
  • KeyboardView will show a Keyboard.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 to setupKeyboardView(_:).
  • KeyboardController viewWillSetupKeyboard() has been renamed to viewWillSetupKeyboardView().
  • KeyboardStyleProvider and its related types are renamed to KeyboardStyleService.

8.8.8

23 Sep 20:49
Compare
Choose a tag to compare

This version makes Keyboard.Services sync service changes to the action handler, if possible.

8.9-rc.1

23 Sep 22:35
Compare
Choose a tag to compare

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 new nextCharacterPrediction(for:) functions.
  • DictationContext can now be set up for a KeyboardApp.
  • Image has a new keyboardTheme image value.
  • Keyboard.NumberPad is a new number pad component.
  • Keyboard.State has a new themeContext property.
  • Keyboard.Services has a new tryRegisterLocalizedCalloutService function.
  • Keyboard.Services has a new tryRegisterLocalizedLayoutService function.
  • KeyboardApp has new deepLinks and keyboardBundleId properties.
  • KeyboardCalloutService has a new tryRegisterLocalizedService function.
  • KeyboardContext no longer syncs keyboard type for the same value.
  • KeyboardContext now starts with KeyboardType.alphabetic(.auto).
  • KeyboardController has a new setup(for:) to setup the keyboad for a KeyboardApp.
  • KeyboardInputController can now be set up for a KeyboardApp.
  • KeyboardLayoutService has a new tryRegisterLocalizedService function.
  • KeyboardSettings can now be set up for a KeyboardApp.
  • 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 and Image extensions have been moved to the Styling namespace.
  • KeyboardInputViewController.host now handles the host bundle ID within the main app.
  • KeyboardView will show a Keyboard.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 to setupKeyboardView(_:).
  • KeyboardController viewWillSetupKeyboard() has been renamed to viewWillSetupKeyboardView().
  • KeyboardStyleProvider and its related types are renamed to KeyboardStyleService.