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
iOS 8 Extensions
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Thomas Eichmann
August 19, 2014
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iOS 8 Extensions
Quick intro into iOS 8 extensions.
Thomas Eichmann
August 19, 2014
Other Decks in Programming
See All in Programming
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
1
430
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
Workers Cache を知る
syumai
0
360
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.2k
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
4
3.5k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
880
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
0
1k
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
310
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
160
Agents on Rails - Rails at Scale 2026
irinanazarova
0
560
Featured
See All Featured
Test your architecture with Archunit
thirion
2
2.4k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
310
Mind Mapping
helmedeiros
1
400
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
Balancing Empowerment & Direction
lara
6
1.3k
Odyssey Design
rkendrick25
PRO
2
870
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Transcript
iOS$8$extensions
about&me mobile'engineer'at'local.ch @teichmann*on*twi-er
what%is%an extension?
a"way"for"you"to"extend"the"system" and"other"applica4ons
The$parts • extension)container • extension)points • extension)host • extensions
extension(container • that's'your%app • can'contain'mul/ple'extensions'(even'of'the'same'type)
extension(container • You%can’t%submit%an%app%extension%to%the%App%Store%unless%it’s% inside%a%containing%app,%and%you%can’t%transfer%an%extension%from% one%app%to%another. • Your%containing%app%must%provide%func3onality%to%iOS%users;%it% can’t%just%contain%extensions.
extension(points • areas%exposed%by%the%system%where%your%extensions%can%bind%to • e.g.%a%Today%Widget%binds%to%the%extension%point%of%the% No6fica6onCenter%framework • you%will%not%be%able%to%use%an%extension%for%any%other%extension% point%than%it%has%been%build%for
extension(points(available(in(iOS(8 • share:"share"content"e.g."with"social"websites • ac(on:"perform"simple"tasks"with"content • today:"widgets"in"the"today"view"of"no9fica9on"center • photo/edi(ng:"edit"a"photo"or"video"within"the"Photos"app •
storage/provider:"document"storage"accessible"by"other"apps" • custom/keyboards:"for"all"apps"on"the"device
extension(host • the%app%that%indirectly%launches%an%extension%via%an%Apple% framework;%the%host%app%never%directly%invokes%an%extension% itself%(e.g.%share,%ac>ons%with%UIAc%vityViewController) • extension%host%can%also%be%a%system%app%itself,%e.g.%the%Today% view%in%the%no>fica>on%center
extensions
an#extension#is#essen*ally#a#UIViewController • presented)full-screen)or)contained)depending)on)the)extension) point)/)your)se7ngs • receives)callbacks)like)viewWillAppear,)viewDidAppear)etc. • there)are)also)UI#less'extensions)(e.g.)ac>ons)can)be)UI-less)
extensions(are(also • separate(built(binaries(/(bundles • own(executable • own(debugging(symbols • own(en7tlements
None
extensions • run%completely%separately%from%the%container%app%in%their%own% sandbox • no#data#sharing#between#container#app#and#extension#by# default%(app%groups%to%the%rescue) • no%direct%communica:on%with%container%app%except%app%URLs
extensions • start&every&*me&in&a&new&process • no&mul*tasking&/&shared&process&(mul*ple&processes&launched& by&different&host&apps) • no&long&running&background&modes&(meant&for&short&lived& tasks) •
use&background&transfers&from&NSURLSession
None
data$exchange NSExtensionContext @property(readonly, copy, nonatomic) NSArray *inputItems NSExtensionItem @property(copy, nonatomic)
NSArray *attachments NSItemProvider @property(copy, readonly, nonatomic) NSArray *registeredTypeIdentifiers - (void)loadItemForTypeIdentifier:(NSString *)typeIdentifier options:(NSDictionary *)options completionHandler:(NSItemProviderCompletionHandler)completionHandler typedef void (^NSItemProviderCompletionHandler)(id <NSSecureCoding> item, NSError *error);
extension(ac+va+on(rules
None
complex(ac*va*on(rules((predicate) {extensionItems = ({ attachments = ({ registeredTypeIdentifiers = (
"com.adobe.pdf", "public.file-url"); }); })} SUBQUERY(extensionItems, $extensionItem, SUBQUERY($extensionItem.attachments, $attachment, ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "com.adobe.pdf").@count == 1).@count == 1
NS_EXTENSION_UNAVAILABLE_IOS
get$your$64+bit$builds$ready!
"An$app$extension$target$must$ include$the$arm64$architecture$in$its$ Architectures$build$se8ngs$or$it$will$ be$rejected$by$the$App$Store."
debugging you$cannot$debug$your$app$and$extension$at$the$same$4me • choose'your'extension's'scheme'in'Xcode • choose'the'host'app'that'you'will'invoke'your'extension'with • wait...'(be'pa<ent)
how$do$I$start?
file$>$new$>$target
None
ExtKitchenSink h"ps:/ /github.com/the/ios82extensions2kitchen2sink (h"p:/ /bit.ly/1pBwn5w)
more%informa*on • WWDC%2015:%sessions%205,%217 • App%Extension%Programming%Guide
thanks':))