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
John Estropia
May 12, 2018
Technology
87
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
72
Making an Efficient Deploy Bot
johnestropia
0
460
Making Sense of Neural Network Training
johnestropia
0
100
My journey taming Core Data: An intro to the CoreStore library
johnestropia
0
180
Fun with Swift 4 KeyPaths
johnestropia
1
660
Pairs JP Team's iOS Deployment
johnestropia
0
970
Making Slackbots deploy iOS apps for you
johnestropia
2
250
OSSの作法(本題)
johnestropia
0
93
Other Decks in Technology
See All in Technology
あなたの知らないAmazon VPC Route Server/Amazon VPC Route Server you don't know about
masakiokuda
2
210
AIアプリを使い分けるための共通ツール基盤を考えてみる#devio2026
osawa
0
170
『GOエコノミー 』(相乗りサービス) におけるスペック駆動開発
mot_techtalk
1
260
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
340
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
260
spanner-autoscalerに学ぶ CRD設計パターン 〜自動化と緊急時対応を両立する Kubernetesコントローラーの作り方〜
tkuchiki
0
230
VS Code × GitHub Copilot での Fabric 開発
ryomaru0825
1
230
ミイダス株式会社 テックチームのご紹介 / MIIDAS Tech Team
miidas
0
110
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
320
顧客の成果創出とプロダクトの成長を 両立するためのFDE
sansantech
PRO
0
640
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
3
510
Featured
See All Featured
We Are The Robots
honzajavorek
0
380
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
850
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Music & Morning Musume
bryan
48
7.4k
How to make the Groovebox
asonas
2
2.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
For a Future-Friendly Web
brad_frost
183
10k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
260
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