• Stars
    star
    1,194
  • Rank 39,182 (Top 0.8 %)
  • Language
    Swift
  • License
    BSD 3-Clause "New...
  • Created over 10 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A custom keyboard for iOS8 that serves as a tasty imitation of the default Apple keyboard. Built using Swift and the latest Apple technologies!

Tasty Imitation Keyboard

I'm working on a 3rd party keyboard for iOS8 and I want it to look and feel as close as possible to Apple's keyboard. Unfortunately, it's not possible to access the keyboard view through code, so this is my attempt to imitate it by hand. (I'm sure there are ways to get even more accuracy via reverse engineering, but that's too much work for me!) In the end, I hope to produce a coherent and robust baseline for creating custom 3rd party keybards — at least, until Apple decides to fully open up their keyboard API.

This keyboard is currently optimized for iPhone. iPad should work, but it'll look like a giant iPhone keyboard.

Recent Screenshots

Fantastic Features

  • No bitmaps! Everything is rendered using CoreGraphics.
  • Dynamic layouts! All the keys are laid out programmatically, meaning that the keyboard is much easier to extend and will automatically work on devices of all sizes.
  • Auto-capitalization, period shortcut, keyboard clicks.
  • An extensible settings screen.
  • Dark mode and solid color mode.
  • This keyboard is an iOS8 extension.

Current State

We are in alpha! The basic features and appearance should all be there by now. I'll try to not commit broken builds anymore.

Good news! I now have an app in the App Store that's built on top of this keyboard, so we know that it can pass the App Store review process.

Hold-to-select-alternate-characters will be implemented at a later time.

Build Instructions

  1. Edit Scheme for the Keyboard target and set the Executable to be HostingApp.app.
  2. Run the Keyboard target.
  3. Go to Settings → General → Keyboard → Keyboards → Add New Keyboard on your device and add the third-party keyboard.
  4. Go back to the app. You should be able to select the keyboard via the globe icon.

Learning Goals

  • Swift
  • 3rd party extensions
  • 3rd party frameworks (for IB use)
  • Autolayout
  • CoreGraphics
  • finally release an app on the App Store, darn it

Other Stuff

Please consult the project wiki for technical details. You may find it handy if you're implementing your own keyboard!

I made a 3rd party functionless keyboard with a similar layout but a much simpler program structure for debugging purposes. You can find it here: faux-testing-keyboard

🙀 Please forgive the incredibly confusing code in some of the classes. I started out trying to be all neat and perfect, but a self-imposed deadline for a personal project forced me to barge forward closer to release. And you know how that goes... 🙀

Finally, keep in mind that I am not a framework maintainer nor intend to become one. This release is public and open source because I have no reason to keep it private, not because I wish to improve it for years on end (though I still may). Expect work on this project to be sporadic at best. If you wish to use this in production, rather than waiting on me, I strongly encourage you to fork.

License

This project is licensed under the 3-clause ("New") BSD license. Go Bears!

More Repositories

1

sensible-side-buttons

A macOS menu bar app that enables system-wide navigation functionality for the side buttons on third-party mice.
C
1,863
star
2

crdt-playground

Swift
295
star
3

good-spirits

A drink tracker for iOS with Untappd and HealthKit integration.
Swift
176
star
4

backgroundifier-buddy

Swift
40
star
5

cyrillic-transliterator

This set of apps allows you to type Latin characters in OSX and have them transliterate in real time into Cyrillic characters. This includes multi-character transliterations like 'sh'/'ш'.
Objective-C
40
star
6

backgroundifier-public

Code for my Backgroundifier image conversion droplet for OSX. UI nib and other assets not included and not licensed for reuse. Code licensed under BSD.
Swift
30
star
7

faux-testing-keyboard

A fake 3rd party keyboard intended to debug issues with constraints and rotations, as well as to compare performance between manual layout and autolayout.
Swift
12
star
8

app-pauser

A simple app that allows you to suspend and resume applications and processes running on your system, bringing them down to 0% CPU.
Objective-C
10
star
9

aumidisynth-offline-render-test

Trying to get offline render working with kAudioUnitSubType_MIDISynth and AVAudioEngine. (Update: it works!)
Objective-C
6
star
10

force-button

A pressure sensitive, procedural, switch-like UIControl button & selection popup. Feel free to assume a BSD license.
Swift
3
star
11

chicken-scratch

A macOS Notification Center text field, in the same vein as tyke.app.
Swift
2
star
12

archagon.net

My Jekyll-based homepage. Not actually powered by Github Jekyll — Github Pages only serves the locally-compiled HTML and CSS.
CSS
2
star
13

uifeedbackgenerator-lag-test

UIFeedbackGenerator seems to have some latency. This is the simplest possible test case I could think of. https://lists.apple.com/archives/cocoa-dev/2016/Oct/msg00002.html
Swift
2
star
14

degausser

A nostalgic faux degauss button in your Mac menu bar! (WIP) Goals: explore shaders, GL, and procedural generation; figure out how to fake an interesting analog graphical effect in software.
C++
2
star
15

ABExpandingViewController

A popover-like container view controller that shrinks and contracts based on its two child view controllers.
Objective-C
1
star
16

a-jekyll-blog

A test Jekyll blog for messing around.
CSS
1
star
17

la-mulana-hd-text-encoder-decoder

A modified version of the script used to generate the La-Mulana HD Wiki text dump. The script can now re-encode the .dat file, allowing any changes to be used in the game.
Python
1
star
18

grammatical-passphrase-generator

A JS+HTML-based variant on diceware that follows grammatical sentence structure.
1
star
19

ios-bluetooth-headphone-unsleeper

My BT headphones (MDR-1RBT v1) disable their radio when there's more than a few seconds of silence: fine for music, but horrible for cleaned-up audiobooks and podcasts. This simple app plays an inaudible sound in the background to prevent this. It also starts a null recording session in order to show the expanded red status bar (as a reminder).
Swift
1
star