KeyboardKitPro

8.7.0

KeyboardKit lets you create custom keyboards with a few lines of code, using Swift & SwiftUI.
KeyboardKit/KeyboardKitPro

What's New

2024-06-19T20:03:12Z

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.

KeyboardKit Logo

Version Swift 5.9 Swift UI Twitter: @getkeyboardkit Mastodon: @keyboardkit@techhub.social

About KeyboardKit Pro

KeyboardKit is a Swift SDK that lets you create fully customizable keyboards in a few lines of code, using SwiftUI.

KeyboardKit extends Apple's native APIs and provides you with a lot more functionality. It lets you mimic the native iOS keyboard and tweak its style and behavior, or create completely custom keyboards.

Custom iOS keyboard extensions can be used with all other apps that support text input. It's the only way for your product, brand or technology to directly interact with other apps on iOS. Don't miss out!

KeyboardKit Pro extends KeyboardKit with pro features like fully localized keyboards & services, autocomplete & autocorrect, an emoji keyboard, AI supporting capabilities, themes, dictation, and much, much more. Go pro today to take your keyboard to the next level.

Commercially Licensed

KeyboardKit Pro is closed source and requires a commercial license.

Licenses can be purchased from the website or from Gumroad.

Installation

KeyboardKit Pro can be installed with the Swift Package Manager:

https://github.com/KeyboardKit/KeyboardKitPro.git

Unlike KeyboardKit, KeyboardKit Pro is a binary target and must only be linked to the app target.

Getting started

After installing KeyboardKit Pro, just make your KeyboardViewController inherit KeyboardInputViewController instead of UIInputViewController:

import KeyboardKitPro

class KeyboardController: KeyboardInputViewController {}

This gives your controller access to new lifecycle functions like viewWillSetupKeyboard, observable state like state.keyboardContext, services like services.actionHandler, and much more.

If you just want to use the default SystemKeyboard view, which mimics a native iOS keyboard, you only have to register your license key on launch:

func viewDidLoad() {
    super.viewDidLoad()
    let license = try? setupPro(
        withLicenseKey: "your-key",
        locales: [...], // Define which locales to use 
    ) { license in
        // Make any license-based configurations here 
    }
}

To replace or customize the default SystemKeyboard, just override viewWillSetupKeyboard and call setupPro with a view builder:

class KeyboardViewController: KeyboardInputViewControllerย {

    override func viewWillSetupKeyboard() {
        super.viewWillSetupKeyboard()
        try? setupPro(
            withLicenseKey: "your-key",
            locales: [...], // Define which locales to use
            licenseConfiguration: { license in
                // Make any configurations and service adjustments here
            },
            view: { [weak self] controller in // <-- Use [weak self] or [unowned self] if you need self here.  
                SystemKeyboard(
                    state: controller.state,
                    services: controller.services,
                    buttonContent: { $0.view },
                    buttonView: { $0.view },
                    emojiKeyboard: { $0.view },
                    toolbar: { _ in MyCustomToolbar() }
                )
            }
        )
    }
}

For more information, please see the getting started guide.

Supported Locales

KeyboardKit supports 68 keyboard-specific locales:

๐Ÿ‡ฆ๐Ÿ‡ฑ ๐Ÿ‡ฆ๐Ÿ‡ช ๐Ÿ‡ฆ๐Ÿ‡ฒ ๐Ÿ‡ง๐Ÿ‡พ ๐Ÿ‡ง๐Ÿ‡ฌ ๐Ÿ‡ฆ๐Ÿ‡ฉ ๐Ÿณ๏ธ ๐Ÿ‡ญ๐Ÿ‡ท ๐Ÿ‡จ๐Ÿ‡ฟ ๐Ÿ‡ฉ๐Ÿ‡ฐ
๐Ÿ‡ณ๐Ÿ‡ฑ ๐Ÿ‡ง๐Ÿ‡ช ๐Ÿ‡บ๐Ÿ‡ธ ๐Ÿ‡ฌ๐Ÿ‡ง ๐Ÿ‡บ๐Ÿ‡ธ ๐Ÿ‡ช๐Ÿ‡ช ๐Ÿ‡ซ๐Ÿ‡ด ๐Ÿ‡ต๐Ÿ‡ญ ๐Ÿ‡ซ๐Ÿ‡ฎ ๐Ÿ‡ซ๐Ÿ‡ท
๐Ÿ‡จ๐Ÿ‡ฆ ๐Ÿ‡ง๐Ÿ‡ช ๐Ÿ‡จ๐Ÿ‡ญ ๐Ÿ‡ฌ๐Ÿ‡ช ๐Ÿ‡ฉ๐Ÿ‡ช ๐Ÿ‡ฆ๐Ÿ‡น ๐Ÿ‡จ๐Ÿ‡ญ ๐Ÿ‡ฌ๐Ÿ‡ท ๐Ÿ‡บ๐Ÿ‡ธ ๐Ÿ‡ฎ๐Ÿ‡ฑ
๐Ÿ‡ญ๐Ÿ‡บ ๐Ÿ‡ฎ๐Ÿ‡ธ ๐Ÿณ๏ธ ๐Ÿ‡ฎ๐Ÿ‡ฉ ๐Ÿ‡ฎ๐Ÿ‡ช ๐Ÿ‡ฎ๐Ÿ‡น ๐Ÿ‡ฐ๐Ÿ‡ฟ ๐Ÿ‡น๐Ÿ‡ฏ ๐Ÿ‡น๐Ÿ‡ฏ ๐Ÿ‡น๐Ÿ‡ฏ
๐Ÿ‡ฑ๐Ÿ‡ป ๐Ÿ‡ฑ๐Ÿ‡น ๐Ÿ‡ฒ๐Ÿ‡ฐ ๐Ÿ‡ฒ๐Ÿ‡พ ๐Ÿ‡ฒ๐Ÿ‡น ๐Ÿ‡ฒ๐Ÿ‡ณ ๐Ÿณ๏ธ ๐Ÿ‡ณ๐Ÿ‡ด ๐Ÿ‡ณ๐Ÿ‡ด ๐Ÿ‡ฎ๐Ÿ‡ท
๐Ÿ‡ต๐Ÿ‡ฑ ๐Ÿ‡ต๐Ÿ‡น ๐Ÿ‡ง๐Ÿ‡ท ๐Ÿ‡ท๐Ÿ‡ด ๐Ÿ‡ท๐Ÿ‡บ ๐Ÿ‡ท๐Ÿ‡ธ ๐Ÿ‡ท๐Ÿ‡ธ ๐Ÿ‡ธ๐Ÿ‡ฐ ๐Ÿ‡ธ๐Ÿ‡ฎ ๐Ÿ‡ช๐Ÿ‡ธ
๐Ÿ‡ฆ๐Ÿ‡ท ๐Ÿ‡ฒ๐Ÿ‡ฝ ๐Ÿ‡ฐ๐Ÿ‡ช ๐Ÿ‡ธ๐Ÿ‡ช ๐Ÿ‡น๐Ÿ‡ท ๐Ÿ‡บ๐Ÿ‡ฆ ๐Ÿ‡บ๐Ÿ‡ฟ ๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ

KeyboardKit provides a basic keyboard layout and callout actions, whileย KeyboardKit Pro provides localized layouts, callouts and behaviors for all supported locales.

Pro Features

KeyboardKit Pro extends KeyboardKit with Pro features:

  • โŒจ๏ธ Essentials - KeyboardKit Pro unlocks more essential tools, system keyboard previews, etc.
  • ๐Ÿ’ฅ Actions - KeyboardKit Pro auto-registers the most recently used emojis.
  • ๐Ÿค– AI - KeyboardKit Pro unlocks features that are needed for AI.
  • ๐Ÿ“ฑ App - KeyboardKit Pro unlocks app-specific screens & views.
  • ๐Ÿ’ก Autocomplete - KeyboardKit Pro unlocks on-device & remote autocomplete.
  • ๐Ÿ—ฏ Callouts - KeyboardKit Pro unlocks localized callouts for all locales.
  • ๐ŸŽค Dictation - KeyboardKit Pro can perform dictation from the keyboard.
  • ๐Ÿ˜€ Emojis - KeyboardKit Pro unlocks a powerful emoji keyboard.
  • โŒจ๏ธ External - KeyboardKit Pro can detect if an external keyboard is connected.
  • ๐Ÿ”‰ Feedback - KeyboardKit Pro unlocks tools for toogling feedback on & off.
  • ๐Ÿ  Host - KeyboardKit Pro can identify specific host applications.
  • ๐Ÿ”ฃ Layout - KeyboardKit Pro unlocks localized layouts for all locales.
  • ๐ŸŒ Localization - KeyboardKit Pro unlocks 68 locale-specific services and system keyboards.
  • ๐Ÿ‘ Previews - KeyboardKit Pro unlocks system keyboard and theme previews.
  • โžก๏ธ Proxy - KeyboardKit Pro unlocks ways for UIKit/UITextDocumentProxy to read the full document.
  • ๐Ÿ“ Text - KeyboardKit Pro unlocks tools to let you type within the keyboard.
  • ๐Ÿญ Themes - KeyboardKit Pro unlocks a theme engine with many pre-defined themes.

Every article in the documentation describes in detail what KeyboardKit Pro unlocks for that part of the SDK.

Documentation

The online documentation has more information, articles, code examples, etc.

Demo App

The KeyboardKit repository has a demo app that shows how to display keyboard state, link to system settings, etc.

The demo app has two demo keyboards:

  • Keyboard uses KeyboardKit and a customized SystemKeyboard.
  • KeyboardPro uses KeyboardKit Pro and enables all locales, autocomplete, themes, etc.

Just open and run the demo app in the Demo folder, then enable the keyboards under System Settings. Note that you need to enable full access for some features to work.

KeyboardKit App

If you want to try KeyboardKit Pro without having to write any code or build the demo app from Xcode, there is a KeyboardKit app in the App Store, that lets you try out many pro features.

Contact

Feel free to reach out if you have questions or if you want to contribute in any way:

Commercially Licensed

KeyboardKit Pro is closed source. See the LICENSE file for more info.

Commercial licenses can be purchased from the website or from Gumroad.

Description

  • Swift Tools 5.9.0
View More Packages from this Author

Dependencies

  • None
Last updated: Sat Dec 21 2024 06:54:26 GMT-1000 (Hawaii-Aleutian Standard Time)