Skip to content
Add a powerful keyboard to your Apple Watch app
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
FlickTypeKit Sample (Swift)

Build Status

FlickTypeKit 🚀

"Apple Watch App of the Year" - AppAdvice

"Makes Typing a Breeze" - Forbes

FlickTypeKit screenshots


  • Copy the FlickTypeKit directory from FlickTypeKit Sample (Swift) into your project root folder.

Note: Do not drag it into Xcode.

In your watch extension target:

  • Under General > Embedded Binaries: click the + button, then Add Other... and add FlickTypeKit.framework.
  • Under Build Phases, add a "New Run Script Phase" and place it before the "Compile Sources" phase. Set the contents of the script to the following, to automatically switch between the watchos and watchsimulator variants of the framework as needed:
set -eu
"${PROJECT_DIR}/FlickTypeKit/_internal/" "${PLATFORM_NAME}"

In you watch app target:

  • Under Build Phases > Copy Bundle Resources, add the App Resources/FlickType.storyboard and App Resources/keyboard.png files.
  • Add a "Storyboard Reference" to your main watch storyboard file and set its "Referenced ID" to FlickType.

That's it!

Note: If your app is in Objective-C, make sure Always Embed Swift Standard Libraries is set to YES for the watch extension target.


Simply import FlickType and then modify your existing presentTextInputController() calls to include the additional flickTypeMode argument:

import FlickTypeKit

presentTextInputController(withSuggestions: nil, allowedInputMode: .allowEmoji, flickTypeMode: .ask) { items in
  if let text = items?.first as? String {
    print("User typed text: \(text)")

Note: FlickTypeKit.framework is initially an empty placeholder, and Xcode might highlight the import FlickTypeKit line with an error; simply building your project will populate the framework and fix this.


  • FlickType.Mode.ask will offer a choice between FlickType and the standard input methods (recommended).
  • FlickType.Mode.always will only offer FlickType, skipping the input method selection.
  • will only offer the standard input methods.


The optional startingText argument can be used to support editing of existing text. Editing is currently only supported with FlickType; the value of startingText is ignored when using one of the standard input methods.

Running on device

Once you get things working in the Simulator, email us at with the bundle ID of your watch extension target, so we can whitelist it for use on real devices.

Help & support

See the included sample app, email us, or join us on Discord.

Terms & conditions

See our license page.

Coming soon

  • Improved number & symbol entry
  • More languages
  • Much more…


You can’t perform that action at this time.