KeyboardKitPro

KeyboardKit Pro helps you create custom keyboards for iOS and iPadOS.

OTHER License

Stars
111
Committers
1

Bot releases are hidden (Show)

KeyboardKitPro - Latest Release

Published by danielsaidi about 1 month ago

This version fixes things that break in Xcode 16 and iOS 18.

First of all, it makes multi-gesture buttons work in scroll views, when building from Xcode 16 and running on iOS 18. This is required for the KeyboardKit Pro emoji keyboard to work.

Second, this version makes .url keyboard actions render as SwiftUI Links, since iOS 18 can no longer open URLs using the selector-based approach.

✨ Features

  • GestureButton is a new inline dependency.
  • Image has a new .keyboardUrl extension.

💡 Adjustments

  • GestureButton is used for all buttons instead of the deprecated one.
  • KeyboardAction.url will by default use the new .keyboardUrl image.
  • KeyboardAction.url will by default render as a plain SwiftUI Link.

🐛 Bug fixes

  • Dictation.DisabledKeyboardService now resets its context on the main queue, which silences a background thread warning.

🗑️ Deprecations

  • Gestures.GestureButton and some related types have been deprecated.
KeyboardKitPro -

Published by danielsaidi about 1 month ago

This version adjusts Pro licenses.

KeyboardKitPro -

Published by danielsaidi about 1 month ago

This version adjusts Pro licenses.

KeyboardKitPro -

Published by danielsaidi about 2 months ago

This version fixes a keyboard button gesture bug, where accidentally touching a button when e.g. swiping a scroll view in the toolbar (common for many keyboards that adds actions to the toolbar) causes SwiftUI to not submit a gesture ended event.

🐛 Bug fixes

  • Gestures.GestureButton will now automatically cancel its pressed state if it hasn't received a second gesture event after a certain delay. While this doesn't fix the bug, it will make the button restore itself whenever it happens.
KeyboardKitPro -

Published by danielsaidi about 2 months ago

This version fixes a few inconsistencies and bugs.

💡 Adjustments

  • Autocomplete.ToolbarStyle adjusts the minimum height from 50 to 48 to align closer with the native keyboards, while still leaving room for the standard callouts.

👑 KeyboardKit Pro

  • Autocomplete.LocalService now correctly regards lexicon suggestions as pure complementary, since they (as they should) ignore the current casing, and therefore can mess up capitalization when typing.
KeyboardKitPro -

Published by danielsaidi about 2 months ago

This version continues to rename types to make things more consistent in the 9.0 release. This means that are currently many deprecated names (which may be confusing), but it's all in service for a clean 9.0.

This version also adds a new KeyboardApp type that can be used to define all information for your app. This makes it easy to keep all app-specific information in one place, set up the main app target, etc.

This version also adds a new KeyboardAppView view that can automatically set up main app to use App Group synced settings, register your KeyboardKit Pro license (if any), etc. This removes a lot of manual work.

This version deprecates the recently added settings types, and replaces them with adding persistency to the various context properties instead. This avoids having to keep the contexts in sync with the settings.

This version adds support for Emoji 15.1, which adds a bunch of new emojis, and also adds memory optimized emoji keyboard styles, which make the emoji keyboard consume a LOT less memory, by rendering lower resolution grid items.

This version also tweaks the emoji keyboard configuration for all device types, to make the emoji keyboard look a lot closer to the native emoji keyboard on all device types, including 13" iPads, in both portrait and landscape.

KeyboardKit Pro adds new settings screens, like KeyboardApp.SettingsScreen and KeyboardApp.LocaleScreen, which makes it a lot easier than before to add keyboard settings to the main app target, as well as to the keyboard.

💥 Breaking changes

This version has one breaking change. Due to how settings are now handled, the KeyboardSettings.store no longer accept optional values. You can only replace this store with another valid store, and have a new isStoreSynced property to see if you've successfully set up an app group-synced store.

✨ Features

  • AutocompleteContext has new settings that replace AutocompleteSettings.
  • Autocomplete.Suggestion has a new type property which replaces the bools.
  • Autocomplete.Suggestion has a new source property to indicate its source.
  • Bundle has an isExtension to help you check if code runs in an extension.
  • DictationContext has new setting values that replace DictationSettings.
  • FeedbackContext has new settings that replace the FeedbackSettings type.
  • FeedbackService is a new service type that can trigger audio and haptic feedback.
  • Image has many new utility functions to make it easier to resolve keyboard icons.
  • Keyboard.BottomRow is no longer a Pro feature, but is available in the core library.
  • Keyboard.Services has a new frequentEmojiProvider and removes the static instance.
  • Keyboard.StorageValue is a new type that is used to persist codable types in storage.
  • KeyboardAction.StandardHandler uses an emoji provider instead of an injected handler.
  • KeyboardAction.StandardHandler has new functions to trigger audio and haptic feedback.
  • KeyboardApp is a new type that can be used to setup information for your keyboard app.
  • KeyboardAppView is a new view that can be used to setup your main keyboard app target.
  • KeyboardContext has a computed returnKeyType property, which can also be overridden.
  • KeyboardContext has new settings that replace the KeyboardSettings settings properties.
  • KeyboardContext has a new returnKeyTypeOverride that can override which return key to use.
  • KeyboardContext has a new addedLocales settings that can be used to "activate" certain locales.
  • KeyboardContext now persists the keyboardLocaleIdentifier and restores the locale on next launch.
  • KeyboardContext now has even more KeyboardLocale-based versions of some Locale-based functions.
  • KeyboardLocale has new ListItem & ListDragHandle views to simplify building locale-based lists.
  • KeyboardLocale.ContextMenu now supports providing custom locales instead of using the context ones.
  • KeyboardLocaleInfo has new matches(query:in:) functionality to match locales on free-text queries.
  • KeyboardSettings has a new setup function for App Group-syncing and a new isAppGroupSynced property.

😀 Emojis

  • EmojiCategory has improved support for persistency.
  • EmojiKeyboard now renders better on 13" iPad devices.
  • EmojiKeyboard now displays a dismiss button on iPad devices.
  • EmojiKeyboard now adds an extra row if an input toolbar is used.
  • EmojiKeyboardStyle has memory .optimized emoji keyboard styles.
  • EmojiKeyboardStyle now uses the new .optimized styles by default.
  • EmojiKeyboardStyle has been adjusted to conform to new capabilities.
  • EmojiVersion supports Emoji 15.1 and adds new emojis to the keyboard.

💡 Adjustments

  • AutocompleteContext now stores many properties.
  • Feedback.HapticConfiguration.disabled now triggers .longPressOnSpace.
  • FeedbackContext has changed the way it calculates its feedback configs.
  • Keyboard.Services layoutService will now refresh the keyboard when set.
  • KeyboardLayout.Configuration uses a marginally taller input toolbar height.
  • KeyboardInputViewController now checks if self is nil when setting up a view.
  • KeyboardView now renders better on 13" iPad devices, due to more size tolerance.
  • SystemKeyboard will by default show a numeric input toolbar on large iPad devices.

👑 KeyboardKit Pro

  • Autocomplete.LocalService now applies a source to its suggestions.
  • Autocomplete.LocalService now is now less aggressive with autocorrect.
  • Autocomplete.LocalService now lets you override next character prediction.
  • Autocomplete.RemoteService can now also perform next character prediction.
  • KeyboardApp.HomeScreen can now be configured to display a keyboard section.
  • KeyboardApp.HomeScreen has several new visibility and style configurations.
  • KeyboardApp.SettingsScreen is a new screen view that can manage various settings.

🐛 Bug fixes

  • Autocomplete.LocalProvider is now a typealias.
  • Autocomplete.RemoteProvider is now a typealias.
  • CGSize.isScreenSize now uses 50 points tolerance.
  • View+KeyboardButton explicitly applies an interactable background color.

🗑️ Deprecations & Renamings

  • Most service types are renamed to *Service for a more consistent naming.

  • All *Settings types are deprecated since settings have moved to contexts.

  • SystemKeyboard has been renamed to the shorter KeyboardView.

  • SystemKeyboardBottomRow has been renamed to Keyboard.BottomRow.

  • SystemKeyboardButtonPreview has been renamed to Keyboard.ButtonPreview.

  • EmojiProvider has been deprecated and is no more used by KeyboardKit.

  • Feedback.HapticConfiguration.minimal has been replaced by .disabled.

  • Gestures.KeyboardGesture has been moved & renamed to Keyboard.Gesture.

  • Keyboard.SettingsLink has been deprecated, since a Link works as well.

  • Keyboard.State's dictationConfig is now defined within the dictationContext.

  • KeyboardAppearanceViewModifier has been deprecated, since it didn't behave well.

  • KeyboardSettings settings properties have been deprecated and moved to the context.

8.7.2

This patch defers some heavy memory allocations that is unintentionally caused by the emoji keyboard, by only loading the keyboard when it's requested.

While the emoji keyboard may still cause memory pressure in keyboard extensions that load other heavy components into memory, it will not affect these keyboards on load.

The memory issues are described in a GitHub issue, and seems to be caused by SwiftUI. You can reproduce it by just adding the emoji keyboard to the extension and scroll through the categories.

This memory issue is a top priority, that must be fixed in the upcoming 8.8.

✨ Features

  • Callouts.DisabledActionProvider is a new, disabled action provider.
  • KeyboardLayout.DisabledProvider is a new, disabled layout provider.

🌐 Localization

  • Hebrew now uses a newline arrow instead of text.

💡 Adjustments

  • SystemKeyboard only loads the emoji keyboard when the keyboard type is .emojis.

🐛 Bug fixes

  • Keyboard.Services now properly applies an inverse offset for RTL locales.
KeyboardKitPro -

Published by danielsaidi about 2 months ago

New from RC1

This version fixes some bugs that were found in RC1 and makes it easier to set up App Store-synced settings. It also adds a new KeyboardApp struct that can specify all important information about your app, as well as a KeyboardAppView that makes it a lot easier to set up the main app, register your KeyboardKit Pro license, etc.

About the 8.8 version

This version continues to rename types to make things more consistent in the 9.0 release. This means that are currently many deprecated names (which may be confusing), but it's all in service for a clean 9.0.

This version also adds a new KeyboardApp type that can be used to define all information for your app. This makes it easy to keep all app-specific information in one place, set up the main app target, etc.

This version also adds a new KeyboardAppView view that can automatically set up main app to use App Group synced settings, register your KeyboardKit Pro license (if any), etc. This removes a lot of manual work.

This version deprecates the recently added settings types, and replaces them with adding persistency to the various context properties instead. This avoids having to keep the contexts in sync with the settings.

This version adds support for Emoji 15.1, which adds a bunch of new emojis, and also adds memory optimized emoji keyboard styles, which make the emoji keyboard consume a LOT less memory, by rendering lower resolution grid items.

This version also tweaks the emoji keyboard configuration for all device types, to make the emoji keyboard look a lot closer to the native emoji keyboard on all device types, including 13" iPads, in both portrait and landscape.

KeyboardKit Pro adds new settings screens, like KeyboardApp.SettingsScreen and KeyboardApp.LocaleScreen, which makes it a lot easier than before to add keyboard settings to the main app target, as well as to the keyboard.

💥 Breaking changes

This version has one breaking change. Due to how settings are now handled, the KeyboardSettings.store no longer accept optional values. You can only replace this store with another valid store, and have a new isStoreSynced property to see if you've successfully set up an app group-synced store.

✨ Features

  • AutocompleteContext has new settings that replace AutocompleteSettings.
  • Autocomplete.Suggestion has a new type property which replaces the bools.
  • Autocomplete.Suggestion has a new source property to indicate its source.
  • Bundle has an isExtension to help you check if code runs in an extension.
  • DictationContext has new setting values that replace DictationSettings.
  • FeedbackContext has new settings that replace the FeedbackSettings type.
  • FeedbackService is a new service type that can trigger audio and haptic feedback.
  • Image has many new utility functions to make it easier to resolve keyboard icons.
  • Keyboard.BottomRow is no longer a Pro feature, but is available in the core library.
  • Keyboard.Services has a new frequentEmojiProvider and removes the static instance.
  • Keyboard.StorageValue is a new type that is used to persist codable types in storage.
  • KeyboardAction.StandardHandler uses an emoji provider instead of an injected handler.
  • KeyboardAction.StandardHandler has new functions to trigger audio and haptic feedback.
  • KeyboardApp is a new type that can be used to setup information for your keyboard app.
  • KeyboardAppView is a new view that can be used to setup your main keyboard app target.
  • KeyboardContext has a computed returnKeyType property, which can also be overridden.
  • KeyboardContext has new settings that replace the KeyboardSettings settings properties.
  • KeyboardContext has a new returnKeyTypeOverride that can override which return key to use.
  • KeyboardContext has a new addedLocales settings that can be used to "activate" certain locales.
  • KeyboardContext now persists the keyboardLocaleIdentifier and restores the locale on next launch.
  • KeyboardContext now has even more KeyboardLocale-based versions of some Locale-based functions.
  • KeyboardLocale has new ListItem & ListDragHandle views to simplify building locale-based lists.
  • KeyboardLocale.ContextMenu now supports providing custom locales instead of using the context ones.
  • KeyboardLocaleInfo has new matches(query:in:) functionality to match locales on free-text queries.
  • KeyboardSettings has a new setup function for App Group-syncing and a new isAppGroupSynced property.

😀 Emojis

  • EmojiKeyboard now renders better on 13" iPad devices.
  • EmojiKeyboard now displays a dismiss button on iPad devices.
  • EmojiKeyboard now adds an extra row if an input toolbar is used.
  • EmojiKeyboardStyle has memory .optimized emoji keyboard styles.
  • EmojiKeyboardStyle now uses the new .optimized styles by default.
  • EmojiKeyboardStyle has been adjusted to conform to new capabilities.
  • EmojiVersion supports Emoji 15.1 and adds new emojis to the keyboard.

💡 Adjustments

  • AutocompleteContext now stores many properties.
  • Feedback.HapticConfiguration.disabled now triggers .longPressOnSpace.
  • FeedbackContext has changed the way it calculates its feedback configs.
  • Keyboard.Services layoutService will now refresh the keyboard when set.
  • KeyboardLayout.Configuration uses a marginally taller input toolbar height.
  • KeyboardInputViewController now checks if self is nil when setting up a view.
  • KeyboardView now renders better on 13" iPad devices, due to more size tolerance.
  • SystemKeyboard will by default show a numeric input toolbar on large iPad devices.

👑 KeyboardKit Pro

  • Autocomplete.LocalService now applies a source to its suggestions.
  • Autocomplete.LocalService now is now less aggressive with autocorrect.
  • Autocomplete.LocalService now lets you override next character prediction.
  • Autocomplete.RemoteService can now also perform next character prediction.
  • KeyboardApp.HomeScreen can now be configured to display a keyboard section.
  • KeyboardApp.HomeScreen has several new visibility and style configurations.
  • KeyboardApp.SettingsScreen is a new screen view that can manage various settings.

🐛 Bug fixes

  • Autocomplete.LocalProvider is now a typealias.
  • Autocomplete.RemoteProvider is now a typealias.
  • CGSize.isScreenSize now uses 50 points tolerance.
  • View+KeyboardButton explicitly applies an interactable background color.

🗑️ Deprecations & Renamings

  • Most service types are renamed to *Service for a more consistent naming.

  • All *Settings types are deprecated since settings have moved to contexts.

  • SystemKeyboard has been renamed to the shorter KeyboardView.

  • SystemKeyboardBottomRow has been renamed to Keyboard.BottomRow.

  • SystemKeyboardButtonPreview has been renamed to Keyboard.ButtonPreview.

  • Feedback.HapticConfiguration.minimal has been replaced by .disabled.

  • Gestures.KeyboardGesture has been moved & renamed to Keyboard.Gesture.

  • Keyboard.SettingsLink has been deprecated, since a Link works as well.

  • Keyboard.State's dictationConfig is now defined within the dictationContext.

  • KeyboardAppearanceViewModifier has been deprecated, since it didn't behave well.

  • KeyboardSettings settings properties have been deprecated and moved to the context.

KeyboardKitPro -

Published by danielsaidi 2 months ago

‼️ Important information

KeyboardKit 8.8 has a lot of deprecations, since the structure is being changed and types being renamed to make the upcoming 9.0 cleaner.

These changes don't affect KeyboardActionHandler (which is a better name than *service) and KeyboardStyleProvider which will most probably be removed in 9.0 and replaced with view modifiers.

KeyboardKit 9 is planned to be released soon after the public release of iOS 18 and all corresponding OS versions. It will bump the deployment target to iOS 15.

8.8

This version continues to rename types to make things better in the upcoming 9.0 release. This means that there are currently many deprecated names (which may be confusing), but it's all in service for a clean 9.0.

This version deprecates the recently added settings types, and replaces them with adding persistency to the various context properties instead. This avoids having to keep the contexts in sync with the settings.

To avoid compile-time warnings, these deprecated settings are currently only soft deprecated with a code comment. They will however be completely removed in KeyboardKit 9.0, so make sure to start using the contexts instead.

This version adds support for Emoji 15.1, which adds a bunch of new emojis, and also adds memory optimized emoji keyboard styles, which make the emoji keyboard consume a LOT less memory, by rendering lower resolution grid items.

This version also tweaks the emoji keyboard configuration for all device types, to make the emoji keyboard look a lot closer to the native emoji keyboard on all device types, including larger iPads in both portrait and landscape.

KeyboardKit Pro adds new settings screens, like KeyboardApp.SettingsScreen and KeyboardApp.LanguageSettingsScreen, which makes it a lot easier than before to add keyboard settings to the main app target, as well as to the keyboard.

✨ Features

  • AutocompleteContext has new settings that replace AutocompleteSettings.
  • Autocomplete.Suggestion has a new type property which replaces the bools.
  • Autocomplete.Suggestion has a new source property to indicate its source.
  • Bundle has an isExtension to help you check if code runs in an extension.
  • DictationContext has new setting values that replace DictationSettings.
  • FeedbackContext has new settings that replace the FeedbackSettings type.
  • FeedbackService is a new service type that can trigger audio and haptic feedback.
  • Image has many new utility functions to make it easier to resolve keyboard icons.
  • Keyboard.BottomRow is no longer a Pro feature, but is available in the core library.
  • Keyboard.Services has a new frequentEmojiProvider and removes the static instance.
  • Keyboard.StorageValue is a new type that is used to persist codable types in storage.
  • KeyboardAction.StandardHandler uses an emoji provider instead of an injected handler.
  • KeyboardAction.StandardHandler has new functions to trigger audio and haptic feedback.
  • KeyboardContext has a computed returnKeyType property, which can also be overridden.
  • KeyboardContext has new settings that replace the KeyboardSettings settings properties.
  • KeyboardContext has a new returnKeyTypeOverride that can override which return key to use.
  • KeyboardContext has a new addedLocales settings that can be used to "activate" certain locales.
  • KeyboardContext now persists the keyboardLocaleIdentifier and restores the locale on next launch.
  • KeyboardContext now has even more KeyboardLocale-based versions of some Locale-based functions.
  • KeyboardLocale has new ListItem & ListDragHandle views to simplify building locale-based lists.
  • KeyboardLocale.ContextMenu now supports providing custom locales instead of using the context ones.
  • KeyboardLocaleInfo has new matches(query:in:) functionality to match locales on free-text queries.

😀 Emojis

  • EmojiKeyboard now renders better on 13" iPad devices.
  • EmojiKeyboard now displays a dismiss button on iPad devices.
  • EmojiKeyboard now adds an extra row if an input toolbar is used.
  • EmojiKeyboardStyle has memory .optimized emoji keyboard styles.
  • EmojiKeyboardStyle now uses the new .optimized styles by default.
  • EmojiKeyboardStyle has been adjusted to conform to new capabilities.
  • EmojiVersion supports Emoji 15.1 and adds new emojis to the keyboard.

💡 Adjustments

  • AutocompleteContext now stores many properties.
  • Feedback.HapticConfiguration.disabled now triggers .longPressOnSpace.
  • FeedbackContext has changed the way it calculates its feedback configs.
  • Keyboard.Services layoutService will now refresh the keyboard when set.
  • KeyboardLayout.Configuration uses a marginally taller input toolbar height.
  • KeyboardInputViewController now checks if self is nil when setting up a view.
  • KeyboardView now renders better on 13" iPad devices, due to more size tolerance.
  • SystemKeyboard will by default show a numeric input toolbar on large iPad devices.

👑 KeyboardKit Pro

  • Autocomplete.LocalService now applies a source to its suggestions.
  • Autocomplete.LocalService now is now less aggressive with autocorrect.
  • Autocomplete.LocalService now lets you override next character prediction.
  • Autocomplete.RemoteService can now also perform next character prediction.
  • KeyboardApp.HomeScreen can now be configured to display a keyboard section.
  • KeyboardApp.HomeScreen has several new visibility and style configurations.
  • KeyboardApp.SettingsScreen is a new screen view that can manage various settings.

🐛 Bug fixes

  • Autocomplete.LocalProvider is now a typealias.
  • Autocomplete.RemoteProvider is now a typealias.
  • CGSize.isScreenSize now uses 50 points tolerance.
  • View+KeyboardButton explicitly applies an interactable background color.

🗑️ Deprecations & Renamings

  • Most service types are renamed to *Service for a more consistent naming.
  • All *Settings types are deprecated since settings have moved to contexts.
  • SystemKeyboard has been renamed to the shorter KeyboardView.
  • SystemKeyboardBottomRow has been renamed to Keyboard.BottomRow.
  • SystemKeyboardButtonPreview has been renamed to Keyboard.ButtonPreview.
  • Feedback.HapticConfiguration.minimal has been replaced by .disabled.
  • Gestures.KeyboardGesture has been moved & renamed to Keyboard.Gesture.
  • Keyboard.SettingsLink has been deprecated, since a Link works as well.
  • Keyboard.State's dictationConfig is now defined within the dictationContext.
  • KeyboardAppearanceViewModifier has been deprecated, since it didn't behave well.
  • KeyboardSettings settings properties have been deprecated and moved to the context.
KeyboardKitPro -

Published by danielsaidi 2 months ago

This version updates Pro licenses.

KeyboardKitPro -

Published by danielsaidi 3 months ago

This patch defers some heavy memory allocations that is unintentionally caused by the emoji keyboard, by only loading the keyboard when it's requested.

While the emoji keyboard may still cause memory pressure in keyboard extensions that load other heavy components into memory, it will not affect these keyboards on load.

The memory issues are described in a GitHub issue, and seems to be caused by SwiftUI. You can reproduce it by just adding the emoji keyboard to the extension and scroll through the categories.

This memory issue is a top priority, that must be fixed in the upcoming 8.8.

✨ Features

  • Callouts.DisabledActionProvider is a new, disabled action provider.
  • KeyboardLayout.DisabledProvider is a new, disabled layout provider.

🌐 Localization

  • Hebrew now uses a newline arrow instead of text.

💡 Adjustments

  • SystemKeyboard only loads the emoji keyboard when the keyboard type is .emojis.

🐛 Bug fixes

  • Keyboard.Services now properly applies an inverse offset for RTL locales.
KeyboardKitPro -

Published by danielsaidi 4 months ago

This version adds more binary KeyboardKit Pro licenses.

KeyboardKitPro -

Published by danielsaidi 4 months ago

This version improves the overall autocomplete behavior.

The local autocomplete service will now return proper unknown statuses and suggest any lexicon matches as autocorrections. The standard action handler will automatically ask the autocomplete provider to learn any applied unknown suggestions, if isAutoLearnEnabled is true.

This way to learn unknown suggestions will hopefully solve many frustrations involved with autocomplete, where the provider will behave better over time. Please provide feedback if these adjustments don't behave as expected.

The local autocomplete service can also perform next character prediction, by providing it with the typed text and a list of suggestions. This will be merged with the autocomplete operation in version 9.0.

The autocomplete context also has new ways of registering your own custom autocorrections for any locale, in case you find the default behavior to be lacking in some areas.

Furthermore, this version adds new persistent settings types, adds a KeyboardLocaleInfo protocol to make KeyboardLocale and Locale share many properties, and makes it possible to define which text to use when ending the current sentence.

🚨 Important Information

  • AutocompleteService and all implementations have been renamed to use the new Service name.
  • Autocomplete.LocalService no longer caps suggestions by default. That responsibility is moved to the context.
  • Autocomplete.ToolbarItem no longer adds quotations around unknown suggestions. That responsibility is moved to AutocompleteService.
  • KeyboardInputViewController now checks more things before performing autocomplete, for instance the keyboard context prefersAutocomplete.
  • KeyboardStyleProvider and Keyboard.ButtonStyle now supports native Fonts. This may cause some breaking changes that should be easy to fix.

🆕 New Settings Types

  • AutocompleteSettings is a new observable settings type.
  • DictationSettings is a new observable settings type.
  • FeedbackSettings is a new observable settings type.
  • Keyboard.Settings is a new settings wrapper.

✨ Features

  • Autocomplete.Suggestion has new functions.
  • Autocomplete.TextReplacementDictionary is new type.
  • AutocompleteContext has a new autocorrectDictionary value.
  • AutocompleteContext has a new isAutoLearnEnabled property.
  • AutocompleteContext has a new suggestionDisplayCount property.
  • AutocompleteContext has a new suggestionsFromService property.
  • AutocompleteService has a new nextCharacterPredictions function.
  • AutocompleteService has new ignoreWords(_:) and suggestion functions.
  • KeyboardBehavior and its implementations have a new endSentenceText property.
  • KeyboardAction.StandardProvider can now automatically learn unknown suggestions.
  • KeyboardContext has a new syncKeyboardType(with:) to sync type with the proxy.
  • KeyboardController has a new endSentence(withText:) function to end sentences.
  • KeyboardInputViewController has a new settings property for setting instances.
  • KeyboardInputViewController has a new viewWillSetupInitialKeyboardType method.
  • KeyboardLocaleInfo is a new protocol that is shared by KeyboardLocale and Locale.
  • KeyboardSettings has new ways to register a custom store and settings key prefix.
  • KeyboardStyleProvioder has new ways to register a custom store and settings key prefix.
  • UserDefaults has a new .keyboardSettings value that can be used to persist data.

💡 Adjustments

  • Autocomplete.Toolbar no longer needs an injected locale.
  • Autocomplete.ToolbarItem no longer needs an injected locale.
  • Autocomplete.ToolbarItem no longer adds quotations to unknown suggestions.
  • KeyboardContex prefersAutocomplete is now computed and no longer synced.
  • KeyboardInputViewController now checks KeyboardContext.prefersAutocomplete.
  • KeyboardLayout.iPhoneProvider now handles more keyboard types in a better way.
  • KeyboardSettings have been converted from a namespace to being a part of Keyboard.
  • KeyboardStyle.StandardProvider now sets a smaller font size for the .text action type.

👑 KeyboardKit Pro

  • Autocomplete.LocalService no longer takes a maxCount parameter.
  • Autocomplete.LocalService will now return lexicon matches as autocorrections.
  • Autocomplete.LocalService will now return proper unknown state for suggestions.
  • Dictation.ProKeyboardService uses an action handler to open app and navigate back.
  • Emoji.KeyboardMenu will now trigger haptic feedback when tapping an emoji category.
  • KeyboardHostApplication now implements Identifiable and has a new name property.
  • KeyboardHostApplication now defines even more applications and has a url property.
  • KeyboardHostApplicationProvider is a new protocol that is implemented by some types.

🐛 Bug fixes

  • KeyboardAction.text now properly renders its texts.
  • KeyboardInputViewController now sets the initial keyboard type when the native type is ready.
  • KeyboardLayout.iPhoneProvider no longer inserts two . keys for email keyboards with a go key.
  • UITextDocumentProxy now proceeds inserting a word replacement even if there's no current word.

🗑️ Deprecations

  • Keyboard.ReturnKeyType prefersAutocomplete has been deprecated, since the keyboard type should determine this.
KeyboardKitPro -

Published by danielsaidi 4 months ago

This version improves the overall autocomplete behavior.

The local autocomplete provider will now return proper unknown statuses and suggest any lexicon matches as autocorrections. The standard action handler will automatically ask the autocomplete provider to learn any applied unknown suggestions, if isAutoLearnEnabled is true.

This way to learn unknown suggestions will hopefully solve many frustrations involved with autocomplete, where the provider will behave better over time. Please provide feedback if these adjustments don't behave as expected.

The autocomplete context also has new ways of registering your own custom autocorrections for any locale, in case you find the default behavior to be lacking in some areas.

Furthermore, this version adds brand new persistent settings types, adds a KeyboardLocaleInfo protocol that makes KeyboardLocale and Locale share many properties, and makes it possible to define which text to use when ending the current sentence.

🚨 Important Information

  • Autocomplete.LocalProvider no longer caps suggestions by default. That responsibility is moved to Autocomplete.Toolbar.
  • Autocomplete.ToolbarItem no longer adds quotations around unknown suggestions. That responsibility is moved to AutocompleteProvider.
  • KeyboardInputViewController now checks more things before performing autocomplete, for instance the keyboard context prefersAutocomplete.
  • KeyboardStyleProvider and Keyboard.ButtonStyle now supports native Fonts. This may cause some breaking changes that should be easy to fix.

🆕 New Settings Types

  • AutocompleteSettings is a new observable settings type.
  • DictationSettings is a new observable settings type.
  • FeedbackSettings is a new observable settings type.
  • Keyboard.Settings is a new settings wrapper.

✨ Features

  • Autocomplete.Suggestion has new functions.
  • Autocomplete.TextReplacementDictionary is new type.
  • AutocompleteContext has a new autocorrectDictionary value.
  • AutocompleteContext has a new isAutoLearnEnabled property.
  • AutocompleteContext has a new preferredSuggestionCount property.
  • AutocompleteContext has a new suggestionsToDisplay property.
  • AutocompleteProvider has new ignoreWords(_:) and suggestion functions.
  • KeyboardBehavior and its implementations have a new endSentenceText property.
  • KeyboardAction.StandardProvider can now automatically learn unknown suggestions.
  • KeyboardContext has a new syncKeyboardType(with:) to sync type with the proxy.
  • KeyboardController has a new endSentence(withText:) function to end sentences.
  • KeyboardInputViewController has a new settings property for setting instances.
  • KeyboardInputViewController has a new viewWillSetupInitialKeyboardType method.
  • KeyboardLocaleInfo is a new protocol that is shared by KeyboardLocale and Locale.
  • KeyboardSettings has new ways to register a custom store and settings key prefix.
  • KeyboardStyleProvioder has new ways to register a custom store and settings key prefix.
  • UserDefaults has a new .keyboardSettings value that can be used to persist data.

💡 Adjustments

  • Autocomplete.Toolbar no longer needs an injected locale.
  • Autocomplete.ToolbarItem no longer needs an injected locale.
  • Autocomplete.ToolbarItem no longer adds quotations to unknown suggestions.
  • KeyboardContex prefersAutocomplete is now computed and no longer synced.
  • KeyboardInputViewController now checks KeyboardContext.prefersAutocomplete.
  • KeyboardLayout.iPhoneProvider now handles more keyboard types in a better way.
  • KeyboardSettings have been converted from a namespace to being a part of Keyboard.
  • KeyboardStyle.StandardProvider now sets a smaller font size for the .text action type.

👑 KeyboardKit Pro

  • Autocomplete.LocalProvider no longer takes a maxCount parameter.
  • Autocomplete.LocalProvider will now return lexicon matches as autocorrections.
  • Autocomplete.LocalProvider will now return proper unknown state for suggestions.
  • Dictation.ProKeyboardService uses an action handler to open app and navigate back.
  • Emoji.KeyboardMenu will now trigger haptic feedback when tapping an emoji category.
  • KeyboardHostApplication now implements Identifiable and has a new name property.
  • KeyboardHostApplication now defines even more applications and has a url property.
  • KeyboardHostApplicationProvider is a new protocol that is implemented by some types.

🐛 Bug fixes

  • KeyboardAction.text now properly renders its texts.
  • KeyboardInputViewController now sets the initial keyboard type when the native type is ready.
  • KeyboardLayout.iPhoneProvider no longer inserts two . keys for email keyboards with a go key.
  • UITextDocumentProxy now proceeds inserting a word replacement even if there's no current word.

🗑️ Deprecations

  • Keyboard.ReturnKeyType prefersAutocomplete has been deprecated, since the keyboard type should determine this.
KeyboardKitPro -

Published by danielsaidi 4 months ago

IMPORTANT! This version has a bug where unknown suggestions are not learned when tapped. Until RC3 is out, you can make this work by adding the following in the KeyboardKit Pro license configuration block:

guard let handler = services.actionHandler as? KeyboardAction.StandardHandler else { return }
handler.autocompleteProvider = services.autocompleteProvider

This version improves the overall autocomplete behavior.

The local autocomplete provider now returns proper unknown statuses for the leading quotation suggestion. The standard action handler will automatically ask the autocomplete provider to learn applied unknown suggestions, if isAutoLearnEnabled is true.

This way to learn unknown suggestions will hopefully solve many frustrations involved with autocomplete, where the provider will behave better over time. Please provide feedback if these adjustments don't behave as expected.

The local autocomplete provider will also now use any lexicon match as the primary autocorrecting word.

Furthermore, this version adds brand new persistent settings types, adds a KeyboardLocaleInfo protocol that makes KeyboardLocale and Locale share many properties, and makes it possible to define which text to use when ending the current sentence.

🚨 Important Information

  • Autocomplete.LocalProvider no longer caps suggestions by default. That responsibility has been moved to the Autocomplete.Toolbar.
  • Autocomplete.ToolbarItem no longer adds quotations around unknown suggestions. That responsibility has been moved to the AutocompleteProvider.
  • KeyboardInputViewController will check more configurations before performing autocomplete. The keyboard context's prefersAutocomplete will now also be used to make this decision.
  • KeyboardStyleProvider and Keyboard.ButtonStyle now supports native Fonts, to give you more design freedom. This may result in breaking changes, but these should be easy to fix.

🆕 New Settings Types

  • AutocompleteSettings is a new observable settings type.
  • DictationSettings is a new observable settings type.
  • FeedbackSettings is a new observable settings type.
  • Keyboard.Settings is a new settings type container.

✨ Features

  • Autocomplete.Suggestion has new functions.
  • Autocomplete.TextReplacementDictionary is new type.
  • AutocompleteContext has a new autocorrectDictionary value.
  • AutocompleteContext has a new isAutoLearnEnabled property.
  • AutocompleteContext has a new preferredSuggestionCount property.
  • AutocompleteContext has a new suggestionsToDisplay property.
  • AutocompleteProvider has new ignoreWords(_:) and suggestion functions.
  • KeyboardBehavior and its implementations have a new endSentenceText property.
  • KeyboardAction.StandardProvider can now automatically learn unknown suggestions.
  • KeyboardContext has a new syncKeyboardType(with:) to sync type with the proxy.
  • KeyboardController has a new endSentence(withText:) function to end sentences.
  • KeyboardInputViewController has a new settings property for setting instances.
  • KeyboardInputViewController has a new viewWillSetupInitialKeyboardType method.
  • KeyboardLocaleInfo is a new protocol that is shared by KeyboardLocale and Locale.
  • KeyboardSettings has new ways to register a custom store and settings key prefix.
  • KeyboardStyleProvioder has new ways to register a custom store and settings key prefix.
  • UserDefaults has a new .keyboardSettings value that can be used to persist data.

💡 Adjustments

  • Autocomplete.ToolbarItem no longer adds quotations to unknown suggestions.
  • KeyboardContex prefersAutocomplete is now computed and no longer synced.
  • KeyboardInputViewController now checks KeyboardContext.prefersAutocomplete.
  • KeyboardLayout.iPhoneProvider now handles more keyboard types in a better way.
  • KeyboardSettings have been converted from a namespace to being a part of Keyboard.
  • KeyboardStyle.StandardProvider now sets a smaller font size for the .text action type.

👑 KeyboardKit Pro

  • Autocomplete.LocalProvider no longer takes a maxCount parameter.
  • Autocomplete.LocalProvider will now return proper unknown state for suggestions.
  • Dictation.ProKeyboardService uses an action handler to open app and navigate back.
  • Emoji.KeyboardMenu will now trigger haptic feedback when tapping an emoji category.
  • KeyboardHostApplication now implements Identifiable and has a new name property.
  • KeyboardHostApplication now defines even more applications and has a url property.
  • KeyboardHostApplicationProvider is a new protocol that is implemented by some types.

🐛 Bug fixes

  • KeyboardAction.text now properly renders its texts.
  • KeyboardInputViewController now sets the initial keyboard type when the native type is ready.
  • KeyboardLayout.iPhoneProvider no longer inserts two . keys for email keyboards with a go key.
  • UITextDocumentProxy now proceeds inserting a word replacement even if there's no current word.

🗑️ Deprecations

  • Keyboard.ReturnKeyType prefersAutocomplete has been deprecated, since the keyboard type should determine this.
KeyboardKitPro -

Published by danielsaidi 5 months ago

KeyboardKit 8.7 improves the overall autocomplete behavior, adds a brand new settings concept and has many other features & fixes.

The local autocomplete provider now returns proper unknown statuses for the leading quotation suggestion. The standard action handler will automatically ask the autocomplete provider to learn applied unknown suggestions, if isAutoLearnEnabled is true.

This way to learn unknown suggestions will hopefully solve many frustrations involved with autocomplete, where the provider will behave better over time. Please provide feedback if these adjustments don't behave properly, or as expected.

Another change is that the KeyboardInputViewController will check more configurations before performing autocomplete. The keyboard context's prefersAutocomplete property will now also be used to make this decision.

Another change worth knowing, is that the Autocomplete.ToolbarItem view no longer adds quotations around unknown suggestions. That responsibility has been moved to the autocomplete provider. The view will just show the titles it receives.

Furthermore, this version adds brand new persistent settings types, adds a KeyboardLocaleInfo protocol that makes KeyboardLocale and Locale share many properties, and makes it possible to define which text to use when ending the current sentence.

🚨 Important Information

KeyboardStyleProvider and Keyboard.ButtonStyle now supports defining native Fonts, to give you more freedom when designing custom keyboards. This may result in breaking changes, if you use have overridden the style provider font or access the style font, but these should be easy to fix.

🆕 New Settings Types

  • AutocompleteSettings is a new observable settings type.
  • DictationSettings is a new observable settings type.
  • FeedbackSettings is a new observable settings type.
  • Keyboard.Settings is a new settings type container.

✨ Features

  • Autocomplete.Suggestion has new functions.
  • Autocomplete.TextReplacementDictionary is new type.
  • AutocompleteContext has a new autocorrectDictionary value.
  • AutocompleteContext has a new isAutoLearnEnabled property.
  • AutocompleteContext has a new preferredSuggestionCount property.
  • AutocompleteProvider has new ignoreWords(_:) and suggestion functions.
  • KeyboardBehavior and its implementations have a new endSentenceText property.
  • KeyboardAction.StandardProvider can now automatically learn unknown suggestions.
  • KeyboardContext has a new syncKeyboardType(with:) to sync type with the proxy.
  • KeyboardController has a new endSentence(withText:) function to end sentences.
  • KeyboardInputViewController has a new settings property for setting instances.
  • KeyboardInputViewController has a new viewWillSetupInitialKeyboardType method.
  • KeyboardLocaleInfo is a new protocol that is shared by KeyboardLocale and Locale.
  • KeyboardSettings has new ways to register a custom store and settings key prefix.
  • KeyboardStyleProvioder has new ways to register a custom store and settings key prefix.
  • UserDefaults has a new .keyboardSettings value that can be used to persist data.

💡 Adjustments

  • Autocomplete.ToolbarItem no longer adds quotations to unknown suggestions.
  • KeyboardContex prefersAutocomplete is now computed and no longer synced.
  • KeyboardInputViewController now checks KeyboardContext.prefersAutocomplete.
  • KeyboardLayout.iPhoneProvider now handles more keyboard types in a better way.
  • KeyboardSettings have been converted from a namespace to being a part of Keyboard.
  • KeyboardStyle.StandardProvider now sets a smaller font size for the .text action type.

👑 KeyboardKit Pro

  • Autocomplete.LocalProvider will now return proper unknown state for suggestions.
  • Dictation.ProKeyboardService uses an action handler to open app and navigate back.
  • Emoji.KeyboardMenu will now trigger haptic feedback when tapping an emoji category.
  • KeyboardHostApplication now implements Identifiable and has a new name property.
  • KeyboardHostApplication now defines even more applications and has a url property.
  • KeyboardHostApplicationProvider is a new protocol that is implemented by some types.

🐛 Bug fixes

  • KeyboardAction.text now properly renders its texts.
  • KeyboardInputViewController now sets the initial keyboard type when the native type is ready.
  • KeyboardLayout.iPhoneProvider no longer inserts two . keys for email keyboards with a go key.
  • UITextDocumentProxy now proceeds inserting a word replacement even if there's no current word.

🗑️ Deprecations

  • Keyboard.ReturnKeyType prefersAutocomplete has been deprecated, since the keyboard type should determine this.
KeyboardKitPro -

Published by danielsaidi 5 months ago

This version adds support for 5 new locales, support for diacritics, and makes it easier to identify the host application. It also improves many of the localized system keyboards that are provided by Pro.

This version also changes the default autocomplete behavior, by making KeyboardInputViewController only use the pre-cursor part of the current word for autocomplete, which is how the native keyboard behaves.

This version also makes KeyboardKit Pro no longer overwrite custom services that are set before registering a license. This means that you can now apply custom services at any time, without it being overwritten.

This version also reduces load times and memory usage in KeyboardKit Pro, by lazily resolving localized callout action providers and layout providers, and makes all supported locales use the iPad Pro layout.

✨ Features

  • Keyboard.Accent is a new typealias for diacritics.
  • Keyboard.Diacritic is a new type that lets you model diacritics.
  • KeyboardAction.accent is a new typealias for the .diacritic action.
  • KeyboardAction.diacritic is a new action that lets you insert diacritics.
  • KeyboardController has a new insertDiacritic(_:) function.
  • KeyboardLayout and its Item has much new functionality.
  • KeyboardLocale has new locale-based initializers and matching functions.
  • UITextDocumentProxy has a new insertDiacritic(_:) function.

💡 Adjustments

  • KeyboardInputViewController autocompleteText now uses the pre-cursor part of the current word, instead of the full word.
  • KeyboardInputViewController hostBundleId has been renamed to hostApplicationBundleId.

🌐 New Locales

  • French (Canada) - fr_CA
  • Norwegian (Nynorsk) - nn
  • Spanish (Latin America) - es_419
  • Spanish (Mexico) - es_MX
  • Welsh - cy

👑 KeyboardKit Pro

  • Callouts.StandardActionProvider now allocates license services lazily, on demand.

  • Keyboard.ToggleToolbar can now use an external toggle binding.

  • Keyboard.ToggleToolbar no longer relies on a standard AnyView.

  • Keyboard.ToggleToolbarToggle is a new, customizable toolbar toggle.

  • KeyboardContext has a new hostApplication property.

  • KeyboardHostApplication is a new enum with known applications.

  • KeyboardInputViewController has a new hostApplication property.

  • KeyboardInputViewController setupPro no longer creates a new callout provider.

  • KeyboardInputViewController setupPro no longer creates a new layout provider.

  • KeyboardLayout has a new LatinLayoutType enum.

  • KeyboardLayout.ProProvider.Czech now uses proper diacritic keys on iPhone & iPad.

  • KeyboardLayout.StandardProvider now allocates license services lazily, on demand.

  • KeyboardLocale.georgian no longer uses regular font weight in alphabetic keyboard.

  • KeyboardLocale.norwegian has adjusted callout actions.

  • These locales now use iPad Pro layout:

    • Arabic
    • Belarusian
    • Bulgarian
    • Catalan
    • Cherokee
    • Hebrew
    • Kazakh
    • Kurdish Sorani
    • Kurdish Sorani - Arabic
    • Kurdish Sorani - PC
    • Persian
  • These locales have improved iPad Pro layouts:

    • French (Switzerland)
    • Greek
    • Inari Sami
    • Macedonian
    • Mongolian
  • These locales have improved iPhone layouts:

    • Arabic

🐛 Bug fixes

  • KeyboardAction.tab now uses an LTR/RTL supporting icon.
  • KeyboardContext now matches keyboardLocale on language code as well, to work around system bug.
KeyboardKitPro -

Published by danielsaidi 5 months ago

This version adds support for 5 new locales, support for diacritics, and makes it easier to identify the host application. It also improves many of the localized system keyboards that are provided by Pro.

This version also changes the default autocomplete behavior, by making KeyboardInputViewController only use the pre-cursor part of the current word for autocomplete, which is how the native keyboard behaves.

This version also makes KeyboardKit Pro no longer overwrite custom services that are set before registering a license. This means that you can now apply custom services at any time, without it being overwritten.

This version also reduces load times and memory usage in KeyboardKit Pro, by lazily resolving localized callout action providers and layout providers, and makes all supported locales use the iPad Pro layout.

✨ Features

  • Keyboard.Accent is a new typealias for diacritics.
  • Keyboard.Diacritic is a new type that lets you model diacritics.
  • KeyboardAction.accent is a new typealias for the .diacritic action.
  • KeyboardAction.diacritic is a new action that lets you insert diacritics.
  • KeyboardController has a new insertDiacritic(_:) function.
  • KeyboardLayout and its Item has much new functionality.
  • KeyboardLocale has new locale-based initializers and matching functions.
  • UITextDocumentProxy has a new insertDiacritic(_:) function.

💡 Adjustments

  • KeyboardInputViewController autocompleteText now uses the pre-cursor part of the current word, instead of the full word.
  • KeyboardInputViewController hostBundleId has been renamed to hostApplicationBundleId.

🌐 New Locales

  • French (Canada) - fr_CA
  • Norwegian (Nynorsk) - nn
  • Spanish (Latin America) - es_419
  • Spanish (Mexico) - es_MX
  • Welsh - cy

👑 KeyboardKit Pro

  • Callouts.StandardActionProvider now allocates license services lazily, on demand.

  • Keyboard.ToggleToolbar can now use an external toggle binding.

  • Keyboard.ToggleToolbar no longer relies on a standard AnyView.

  • Keyboard.ToggleToolbarToggle is a new, customizable toolbar toggle.

  • KeyboardContext has a new hostApplication property.

  • KeyboardHostApplication is a new enum with known applications.

  • KeyboardInputViewController has a new hostApplication property.

  • KeyboardInputViewController setupPro no longer creates a new callout provider.

  • KeyboardInputViewController setupPro no longer creates a new layout provider.

  • KeyboardLayout has a new LatinLayoutType enum.

  • KeyboardLayout.ProProvider.Czech now uses proper diacritic keys on iPhone & iPad.

  • KeyboardLayout.StandardProvider now allocates license services lazily, on demand.

  • KeyboardLocale.georgian no longer uses regular font weight in alphabetic keyboard.

  • KeyboardLocale.norwegian has adjusted callout actions.

  • These locales now use iPad Pro layout:

    • Arabic
    • Belarusian
    • Bulgarian
    • Catalan
    • Cherokee
    • Hebrew
    • Kazakh
    • Kurdish Sorani
    • Kurdish Sorani - Arabic
    • Kurdish Sorani - PC
    • Persian
  • These locales have improved iPad Pro layouts:

    • French (Switzerland)
    • Greek
    • Inari Sami
    • Macedonian
    • Mongolian
  • These locales have improved iPhone layouts:

    • Arabic

🐛 Bug fixes

  • KeyboardAction.tab now uses an LTR/RTL supporting icon.
  • KeyboardContext now matches keyboardLocale on language code as well, to work around system bug.
KeyboardKitPro -

Published by danielsaidi 5 months ago

This version updates Pro licenses.

KeyboardKitPro -

Published by danielsaidi 5 months ago

This version makes it easier to create a themed style provider, and adds a new .numberPad keyboard type.

✨ Features

  • Keyboard.KeyboardType has a new .numberPad type.
  • KeyboardStyleProvider.themed has new convenience apis.

💡 Adjustments

  • KeyboardContext will now get its initial keyboard type set to the document text proxy's keyboard type.
KeyboardKitPro -

Published by danielsaidi 5 months ago

This version adjusts Pro licenses.