Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Creating Keyboard Extensions
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
John Estropia
May 12, 2018
Technology
84
0
Share
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
70
Making an Efficient Deploy Bot
johnestropia
0
450
Making Sense of Neural Network Training
johnestropia
0
92
My journey taming Core Data: An intro to the CoreStore library
johnestropia
0
180
Fun with Swift 4 KeyPaths
johnestropia
1
650
Pairs JP Team's iOS Deployment
johnestropia
0
970
Making Slackbots deploy iOS apps for you
johnestropia
2
230
OSSの作法(本題)
johnestropia
0
84
Other Decks in Technology
See All in Technology
AIプラットフォームを運用し続けるための可観測性
tanimuyk
4
1.1k
React、まだ楽しくて草
uhyo
7
4.1k
「コーディング」しない人のための Claude Code 入門 ChatGPT の次の一歩 — 業務に組み込む 育成・共有・自動化
rfdnxbro
2
1.2k
速さだけじゃない! VoidZero ツールが移行先に選ばれる理由
mizdra
PRO
6
750
noUncheckedIndexedAccess、3時間、1万円。 / noUncheckedIndexedAccess, 3 Hours, 10,000 JPY.
kaonavi
1
290
Javaコミュニティをもっと楽しむための9箇条
takasyou
0
1.3k
電子辞書Brainをネットに繋げてみた(自力編)
raspython3
0
460
LLMと共に進化するプロセスを目指して
ymatsuwitter
10
2.6k
Chart.js が簡単に使えるようになっていたので OGP 画像生成に使った話
kamekyame
0
160
製造業のクラウド活用最適解〜AI,DXを加速するデータ基盤の作り方〜
hamadakoji
0
360
AIを「創る」と「使う」の循環 — HRテックが実践するリアルなAI組織実装
taketo957
0
1.5k
EventBridge Connection
_kensh
2
270
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
190
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
190
Faster Mobile Websites
deanohume
310
31k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
150
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Leo the Paperboy
mayatellez
7
1.8k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Evolving SEO for Evolving Search Engines
ryanjones
0
210
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
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