Skip to content

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

License

Notifications You must be signed in to change notification settings

KeyboardKit/KeyboardKitPro

Repository files navigation

KeyboardKit Pro Logo

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

About KeyboardKit Pro

KeyboardKit is a SwiftUI SDK that lets you create fully customizable keyboard extensions with a few lines of code.

KeyboardKit Pro extends KeyboardKit with features like autocomplete & autocorrect, AI support, a powerful emoji keyboard, dictation, themes, app templates, and much more.

Keyboard extensions can be used within all other apps on iOS, where text input is supported. It's the only way for your product or brand to directly interact with other apps on iOS. Don't miss out!

Commercial License

KeyboardKit Pro requires a license to be used. You can sign up on the KeyboardKit website or the Gumroad store.

Installation

KeyboardKit Pro can be installed with the Swift Package Manager:

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

Important

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

Getting started

To use KeyboardKit in a keyboard extension, just import KeyboardKitPro and let your KeyboardViewController inherit KeyboardInputViewController instead of UIInputViewController:

import KeyboardKitPro

class KeyboardController: KeyboardInputViewController {}

This gives you access to lifecycle functions like viewWillSetupKeyboardView, observable state, services, etc.

The easiest way to set up KeyboardKit is to use create a KeyboardApp value to define information for your app:

extension KeyboardApp {

    static var keyboardKitDemo: Self {
        .init(
            name: "KeyboardKit",
            licenseKey: "keyboardkitpro-license-key",
            bundleId: "com.keyboardkit.demo",
            appGroupId: "group.com.keyboardkit.demo",
            deepLinks: .init(app: "kkdemo://")
        )
    }
}

To set up your keyboard, just override viewDidLoad and call setupPro(for:) with your KeyboardApp:

class KeyboardViewController: KeyboardInputViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setupPro(for: .keyboardKitDemo) { result in
            // Use the result or handle the error if you want
        }
    }
}

This will make KeyboardSettings sync data between the main app and its keyboard if an appGroupId is defined, register a KeyboardKit Pro license if a licenseKey is defined, set up dictation, deep links, etc.

To replace or customize the standard, English KeyboardView, just override viewWillSetupKeyboardView and call setupKeyboardView with the view you want to use:

class KeyboardViewController: KeyboardInputViewController {

    override func viewWillSetupKeyboardView() {
        super.viewWillSetupKeyboardView()
        setupKeyboardView { [weak self] controller in // <-- Use weak or unknowned self!
            KeyboardView(
                state: controller.state,
                services: controller.services,
                buttonContent: { $0.view },
                buttonView: { $0.view },
                emojiKeyboard: { $0.view },
                toolbar: { _ in MyCustomToolbar() }
            )
        }
    }
}

To set up the main app with the same configuration as the keyboard extension, just wrap the main content view in a KeyboardAppView and provide it with the same app information:

import SwiftUI
import KeyboardKit

@main
struct MyApp: App {

    var body: some Scene {
        WindowGroup {
            KeyboardAppView(for: .keyboardKitDemo) {
                ContentView()
            }
        }
    }
}

This will make KeyboardSettings sync data between the main app and its keyboard if an appGroupId is defined, register a KeyboardKit Pro license if a licenseKey is defined, set up dictation, deep links, etc.

For more information, please see the getting started guide.

Localization

KeyboardKit supports 68 keyboard-specific locales:

🇦🇱 🇦🇪 🇦🇲 🇧🇾 🇧🇬 🇦🇩 🏳️ 🇭🇷 🇨🇿 🇩🇰
🇳🇱 🇧🇪 🇺🇸 🇬🇧 🇺🇸 🇪🇪 🇫🇴 🇵🇭 🇫🇮 🇫🇷
🇨🇦 🇧🇪 🇨🇭 🇬🇪 🇩🇪 🇦🇹 🇨🇭 🇬🇷 🇺🇸 🇮🇱
🇭🇺 🇮🇸 🏳️ 🇮🇩 🇮🇪 🇮🇹 🇰🇿 🇹🇯 🇹🇯 🇹🇯
🇱🇻 🇱🇹 🇲🇰 🇲🇾 🇲🇹 🇲🇳 🏳️ 🇳🇴 🇳🇴 🇮🇷
🇵🇱 🇵🇹 🇧🇷 🇷🇴 🇷🇺 🇷🇸 🇷🇸 🇸🇰 🇸🇮 🇪🇸
🇦🇷 🇲🇽 🇰🇪 🇸🇪 🇹🇷 🇺🇦 🇺🇿 🏴󠁧󠁢󠁷󠁬󠁳󠁿

KeyboardKit only includes built-in support for English, while KeyboardKit Pro unlocks localized keyboards, layouts, callouts and behaviors for all supported locales.

Open-Source Features

KeyboardKit comes packed with free, open-source features to help you build amazing custom keyboards:

Pro Features

KeyboardKit Pro extends KeyboardKit with Pro features:

  • ⌨️ Essentials - More essential tools, keyboard previews, etc.
  • 🤖 AI - Features that are needed for AI.
  • 📱 App - App-specific screens & views.
  • 💡 Autocomplete - On-device & remote autocomplete.
  • 🗯 Callouts - Localized callouts for 68 locales.
  • 🎤 Dictation - Trigger dictation from the keyboard.
  • 😀 Emojis - A powerful emoji keyboard.
  • ⌨️ External - Detect if an external keyboard is connected.
  • 🏠 Host - Identify and open specific host applications.
  • 🔣 Layout - Localized layouts for 68 locales.
  • 🌐 Localization - Services & views for 68 locales.
  • 👁 Previews - Keyboard & theme previews for in-app use.
  • ➡️ Proxy - Let UITextDocumentProxy read the full document.
  • 📝 Text - Let users type within the keyboard.
  • 🍭 Themes - A theme engine with many pre-defined themes.

Documentation

The online documentation has more information, getting-started guides, articles, code examples, etc.

Demo App

The main repository has a demo app that shows how to set up the main keyboard app, show keyboard status, provide in-app settings, link to system settings, apply custom styles, etc.

The app has two keyboards - a Keyboard that uses KeyboardKit and a KeyboardPro that uses KeyboardKit Pro. Note that you need to enable Full Access for some features to work, like haptic feedback.

Important

The demo isn't code signed, and can therefore not sync settings between the app and its keyboards. As such, the KeyboardPro keyboard has the same settings screens to provide in-keyboard settings.

KeyboardKit App

If you want to try KeyboardKit without having to write any code or build the demo app from Xcode, the KeyboardKit app lets you try out many features by just downloading it from the App Store.

Contact

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

Commercial License

KeyboardKit Pro requires a license to be used. You can sign up on the KeyboardKit website or the Gumroad store.