Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Creating Keyboard Extensions
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
John Estropia
May 12, 2018
Technology
91
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Creating Keyboard Extensions
This is the talk I gave at the May 2018 Tokyo iOS Meetup
John Estropia
May 12, 2018
More Decks by John Estropia
See All by John Estropia
WWDC Party Intro to CoreStore
johnestropia
0
75
Making an Efficient Deploy Bot
johnestropia
0
460
Making Sense of Neural Network Training
johnestropia
0
110
My journey taming Core Data: An intro to the CoreStore library
johnestropia
0
190
Fun with Swift 4 KeyPaths
johnestropia
1
660
Pairs JP Team's iOS Deployment
johnestropia
0
980
Making Slackbots deploy iOS apps for you
johnestropia
2
250
OSSの作法(本題)
johnestropia
0
100
Other Decks in Technology
See All in Technology
Gifu WordPress Meetup #200 に向けて、私たちには何ができるだろうか?/ 2026-11-07 Gifu WordPress Meetup
torounit
0
230
並列度を下げたら速くなった — go build の重複コンパイルを実測で見る
tomoaki25
2
900
「AIチャットからもできないの?」と言われたら ~業務アプリをMCP対応するときの認証・認可の勘所
oidfj
0
160
【dbts2026】AIエージェントの 判断と探索を変える、 データベース エンジニアリング― 既存DBの処理と依存関係から作る、オペレーショナルオントロジー ―
shisyu_gaku
0
240
SLOを阻む不安
sraku2159
0
230
自律的なチームを作るためにTechPMがやらないこと
ny7760
1
530
業務でAWSをあまり使っていない私が、AWSへのモチベを保つ方法
smt7174
0
180
Shared Signals Framework 仕様解説
oidfj
0
220
新米を「売り越さない」、Aurora DSQLで作る在庫ゼロ死守の限定ドロップEC
yama3133
0
190
AWS基盤改善を支える 私たちの理念と行動指針
kentosuzuki
0
120
登壇はいいぞ! 〜Kaigi on Railsに登壇して起きた3つの変化〜
occhi
0
110
Metadata - Section 3 : Dublin Core Standard · DC
mohab1
0
110
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Rails Girls Zürich Keynote
gr2m
96
14k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Odyssey Design
rkendrick25
PRO
2
930
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
390
Between Models and Reality
mayunak
4
570
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
340
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
300
Into the Great Unknown - MozCon
thekraken
41
2.8k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.3k
GraphQLとの向き合い方2022年版
quramy
50
15k
Transcript
IOS KEYBOARD EXTENSIONS TOKYO IOS MEETUP
TOKYO IOS MEETUP @JOHNESTROPIA Developer since 2008 (mostly Mobile apps)
Principal Engineer @ Other hobby projects http://github.com/JohnEstropia/CoreStore
TOKYO IOS MEETUP AGENDA ▸ Creating Keyboard Extensions ▸ Pitfalls
▸ Tips ▸ App Demo
TOKYO IOS MEETUP CREATING A KEYBOARD EXTENSION
TOKYO IOS MEETUP GENERATED FILE Just a UIViewController subclass
TOKYO IOS MEETUP CREATING A KEYBOARD EXTENSION Add keyboard buttons
here as you normally would
TOKYO IOS MEETUP UIINPUTVIEWCONTROLLER Same as self.view
TOKYO IOS MEETUP CREATING A KEYBOARD EXTENSION Middle-man for the
UITextField/UITextVIew
TOKYO IOS MEETUP PITFALL #1 ▸ There is no perfect
way to access the UITextInput’s instance But this is a good thing security-wise
TOKYO IOS MEETUP PITFALL #1 ▸ There is no perfect
way to access the UITextInput’s complete text or its length ▸ But there is a workaround that works “most of the time”
TOKYO IOS MEETUP
TOKYO IOS MEETUP ABCDEF
TOKYO IOS MEETUP ABCDEF
TOKYO IOS MEETUP ABC DEF So to get the complete
text we just append these two together. Right? Right??
TOKYO IOS MEETUP ABC? DEF
TOKYO IOS MEETUP ABC ?DEF
TOKYO IOS MEETUP ABC?D EF
TOKYO IOS MEETUP PITFALL #1 ▸ There is no perfect
way to access the UITextInput’s complete text or its length ▸ Some characters such as (?) and (!) have special treatment! (bug?)
TOKYO IOS MEETUP CREATING BUTTONS
TOKYO IOS MEETUP CREATING BUTTONS
TOKYO IOS MEETUP PLAYING CLICK SOUNDS protocol
TOKYO IOS MEETUP PITFALL #2 ▸ Keyboard “Full Access” is
unfortunately needed even for minor functions ▸ Play clicking sounds ▸ Read from or write to a shared NSUserDefaults ▸ Accessing the clipboard
TOKYO IOS MEETUP PITFALL #2 ▸ Keyboard “Full Access” is
unfortunately needed even for minor functions Info.plist
TOKYO IOS MEETUP PITFALL #2 ▸ Keyboard “Full Access” is
unfortunately needed even for minor functions
TOKYO IOS MEETUP PITFALL #3 ▸ Apps can reject custom
keyboards (e.g. for security) UIApplicationDelegate
TOKYO IOS MEETUP PITFALL #4 ▸ Memory allotted to Keyboard
extensions is severely limited (~30MB) ▸ Avoid using too many nib files / image resources
TIPS
TOKYO IOS MEETUP TIP #1 ▸ Debugging a Keyboard in
a specific locale will run any app in that locale ▸ No need to change the device language!
TOKYO IOS MEETUP
TOKYO IOS MEETUP TIP #2 ▸ You are not restricted
to a single character per input
TOKYO IOS MEETUP TIP #3 ▸ The Globe button logic
can be simulated in a single line!
TOKYO IOS MEETUP TIP #3 ▸ The Globe button logic
can be simulated in a single line!
TOKYO IOS MEETUP TIP #4 ▸ You can check the
"Allow full access" status by twiddling with the clipboard
TOKYO IOS MEETUP
TOKYO IOS MEETUP When the user's clipboard is empty
APP DEMO
TOKYO IOS MEETUP WHAT I'VE LEARNED ▸ There's a ton
of untapped use-cases in third-party apps that can be improved with custom keyboards ▸ Think of them as plugins
THANKS @JohnEstropia