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
CircleBack and WWDC 2015
Search
Pat Zearfoss
June 16, 2015
Technology
37
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CircleBack and WWDC 2015
Pat Zearfoss
June 16, 2015
More Decks by Pat Zearfoss
See All by Pat Zearfoss
Everyday CoreData
pzearfoss
0
94
Other Decks in Technology
See All in Technology
What the customer really needed
kawaguti
PRO
3
210
SREへの勘違いに気づいた後の話
tomodakengo
0
110
現場で役立つ技術負債の効果的な返済方法
masuda220
PRO
9
4.5k
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
31
27k
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
130
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
700
あけおめLINE 傾向とその対策
nasa9084
0
130
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
2
550
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
180
AI に書かせたその API、 “信頼” できますか?
nagix
0
120
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
4
660
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
160
Featured
See All Featured
Building an army of robots
kneath
307
46k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
700
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
360
The Language of Interfaces
destraynor
162
27k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Transcript
WWDC$2015
Major&Themes • Swi%&grows&up • Dev&tools&get&a&revamp • watchOS
Minor&Items • Contacts)framework • Privacy)changes • Search)Indexing • Improvements)to)iTunesConnect
Dev$Tools
Xcode&Server • Server&is&an&applica.on • Users&create&‘bots’ • Bots&run&the&scheme&provided&by&the&project&file&and&report&back • Build&errors •
Warnings • Sta.c&analysis&results • Test&pass&/&fail
Xcode&Server • Server&can&report&code&coverage& • Scriptable • REST&API • Build&scripts&have&access&to&build&results,&products,&etc •
Devices&may&be&a@ached&and&used&for&tesBng.
What%can%we%do%with%Xcode%Server • Could"be"our"only"CI"resource • Jenkins"(via"rest"API) • Provide"coverage"results"for"Fabrice • Tes>ng"and"regression"results"for"Andy •
Automa>cally"trigger"new">ckets"for"problems? • Automa>cally"trigger"builds"on"newly"merged"features
Server
Bot$Summary
Bot$Tests
Bot$Coverage
Bot$Commits
UI#Tes'ng
UI#Tes'ng • Tests&are&wri+en&in&na-ve&code&(swi3,&objec-ve7c) • Run&in&the&same&test&framework&as&Unit&tests&(XCTest) • Captures&screenshots&at&every&step
Recordable*Tests
UI#Tes'ng • Recorded(in(Xcode • Implicit(asser3ons((does(this(bu8on(I(want(to(tap(exist?) • Addi3onal(asser3ons(can(be(added (These&are¬&available&in&the&BDD&style&we&have&been&using,&at&least&I& assume&they’re¬.&Recording&definitely&won’t&work&that&way.)
Other&dev&tools
Address&Sani+zer • Memory(guarding • Like(mallocGuard(or(Valgrind • Can(gather(memory(corrup9on(informa9on • Comes(with(performance(penalty.(
LLVM$Changes$(Objec1ve3C) • C#free#func*ons#without#prototype#is#an#error • Warnings#about#int#(32#bits)#vs#pointer#size#(64#bits) • There#are#c@language#typedefs#(apart#from#NSInteger) • needed#to#fix#the#scan#codebase#that’s#shared#between#iOS/ Android
• Points#towards#moderniza*on#tool#for#Objec*ve@C • Added#features:#instancetype,#property#declara*ons,#NS_ENUM
None
LLVM$Modules • Replacement+for+precompiled+header. • Replaces+text+replacement+with+a+seman6c+construct • Can+now+create+user+modules • Good+for+our+dependencies/pods •
Removes+the+need+to+explicitly+#import+everywhere • @import MyFramework • Lots+of+caveats+here+to+explore
Profile'Guided'Op.miza.on • Compiler*can*use*a*informa1on*from*a*run*of*the*app*to*op1mize* code*internals • LLVM*9>*instrumented*app*9>*profile*9>*PGO • Advantages*in*inlining,*code*layout,*register*alloca1on*and* cacheing. •
Performance*Tests*can*be*used*as*profiles
None
LLDB$Improvements Incremental*improvements*that*will*speed*up*debugging 6*LLDB*has*visibility*about*C*return*types 6*Can*see*inline*methods 6*Can*view*proper<es*on*id*type 6*Can*other*SDK*types,*macros,*constants*by*impor<ng*frameworks* into*LLDB 6*Large*scale*improvements*for*SwiB
App#Thinning Shrinks(the(size(of(the(app(download.( • Uses%informa-on%in%the%asset%catalog • Sends%code%and%resources%appropriate%by%device% • Asset%catalogs%can%contain%arbitrary%binary%resources.%
Swi$%2.0 (and%objec+ve-c)
Swi$%2.0 • Under'the'hood'improvements • New'language'features • Error'handling'(do'...'try) • Guard'keyword •
Improvements'to'protocols'allow'different'programming' paradigms • Error'handling'is'arguably'first'class
Objec&ve(C*addi&ons Three%frontend%language%addi0ons • nullability • generics • __kindOf
Objec&ve(C • Nullability*informs*Swi3*about*whether*an*objc*api*can*return*an* op9onal.* • Generics*inform*about*type*informa9on • __kindOf*allows*polymorphic*handling*of*return*types • LLVM*frontend*improvements
• Not*run9me*enforceable
Wut -(NSArray *)gimmeItems func gimmeItems() -> [AnyObject]? -(NSArray<UIView *>*)gimmeItems func
gimmeItems() -> [UIView]? -(__nonnull NSArray<UIView *>*)gimmeItems func gimmeItems() -> [UIView] -(__nonnull NSArray<__kindOf UIView *>*)gimmeItems func gimmeItems() -> [UIView]
Other&Swi*&improvements • Errors&are&first&class&ci.zens.& • Not&excep.ons,&but&a&func.on&can&throw&an&error.& • Errors&are&enum&types • Which&are&mapped&to&NSError •
Protocol&imporovements • Which&I&don’t&fully&understand • Allows&for&different&seman.cs&on&collec.on&func.ons
*>* • Objec've)c*is*uglier • Swi3*is*cleaner • Interop*is*be:er • We*should*start*adop'ng*Swi3.* •
Improvements*work*on*iOS*7+
watchOS(2.0
watchOS(2.0 • Apps%run%na*ve%on%hardware • WatchKit%apis%are%similar • Enhancements%to%allow%custom%anima*ons%and%such • WatchCommunica*on%framework%in%place%for%interapp% communica*on
• Shared%watch%keychains
We#should#revise#the#watch#app “Users&are&probably&going&to&expect&a&responsive&watch&app” —"A"watch"engineer"I"met"at"lunch
Contacts(Framework
Contacts(Framework • Objec've)C+/+Swi0+framework • Contact+records+and+the+like+are+thread+safe • Queries+return+value+objects+that+are+no+longer+'ed+to+the+ addressbook+source.+ • Mutable+variants+exist+for+altering+address+book+data
• Contacts(provides(a(safe(consistent(id(value
Unified'vs'containered'contacts New$terminology: • Unified'contact"#"a"contact"that’s"been"autolinked"by" addressbook • Container"#"a"source"in"our"parlance:"iCloud,"exchange,"gmail," etc. • Par/al'Contact"#"contacts"are"fetched"without"all"its"proper?es
• Group"#"a"subset"of"contacts"in"a"container
Unified'Contacts
Contact'Groups
Contact'Framework'Implica2ons • Architecture*adheres*closely*to*proposals*for*NAB*2.0 • More*robust*Sync,*Nab*upload • Sync*can*possibly*run*without*cardDav*by*wri@ng*to*the*default* source*and*working*with*the*same*methods*used*by*addressbook* itself. •
Swaths*of*iOS*code*are*rendered*irrelevant*on*iOS9+
AddressBook)Framework)is)deprecated in#iOS9
Spotlight
Spotlight • Searchable*app*content • Also*visible*in*safari*search • Public*data*accessible*even*for*users*who*do*not*have*the*app... • Jump*right*into*app
AirBnb'example
Other&Examples • LinkedIn)adds)contacts)and)communica1ons • Spotlight)can)open)apps)directly)to)other)points)(deep)links)
Cloud&Index • Can%tag%public%items • Public%items%with%enough%interac6on%get%promoted%into%the% cloud • Can%connect%web%content%(along%with%an%app%prompt)
• NSUserAc)vity"(aka"handoff) • Like"a"browser"history • Index"things"the"user"has"done • CoreSpotlight • Index"of"user"content
• Database<like • Web6Markup • Used"if"content"is"mirrored"on"the"web. CoreSpotlight!is!clearly!the!right!API!for!us!to!use.
Leveraging)NSUserAc0vity • Siri%/%Sugges+ons%(apple,%not%ours)%can%act%on%NSUserAc+vity • “Remind%me%about%this”%<C%embeds%the%ac+vity%into%the%reminder
How$should$we$use$search$apis? • Contacts)can)be)indexed)in)CoreSpotlight • Updates)could)be)NSUserAc9vi9es • Watch)handoff) • Siri)/)reminders) •
There)are)foreground)and)background)modes)we)should)explore • We)will)need)to)support)deep)linking)in)new)ways • We)should)be)sure)to)make)our)search)results)as)engaging)as)possible.)Ranking'is')ed' to'engagement • Designers)should)watch)end)of)video
Privacy(&(Security
Privacy • When&asking&the&user&for&contacts&access&we&can&specify&a&‘purpose&string’&to& tell&the&user&why&(iOS&8) • All&APIs&will&have&to&support&hAps • canOpenURL&requires&the&protocol&to&be®istered&at&compile&Ime&in&the&plist. • limited&to&50
• looks&like&universal&links&are&the&answer&(uses&web&urls) • requires&web&work&(video&509) • We&should&embrace&on&disk&file&protecIon.
Security • App$Transport$Security$2$TLS$1.2$w/forward$secrecy$(see$slide). • Excep@ons$must$be$made$at$compile$@me$in$plist • “Always$accessible”$keychain$seGng$disabled$in$iOS$9
Security)IRT)WatchKit • Creden'al*unlocking*with*WK*might*be*cumbersome • Recommends*separate*creden'aling*(from*the*server)*for*WK* opera'ons. • This*might*require*reworking*our*security*model*somewhat*to* allow*for*refresh*tokens*or*a*token*to*get*another*token.
Shared'Web'Creden,als • Sharing)auto)fill)passwords)between)safari)&)iOS. • Keychain)underlies)this. • Requires)an)added)en>tlement)on)the)app • Relates)to)handoff,)app)links •
Might)also)consider)iCloud)stored)creden>al
iTunesConnect+&+ Tes-light
iTunesConnect • Mac%and%iOS%are%not%longer%separate • Various%other%UX/site%org%changes • “Scheduled%Release”%<%set%date%and%=me%of%release. • Can%schedule%promo=onal%pricing •
Certain%opera=ons%can%be%done%via%XML... • Many%updates%on%the%resources%page
Tes$light • Clearer'breakout'of'internal'and'external'testers • Can'specify'different'version'for'internal/external • Tes:light'app • Users'can'see'which'apps'aren’t'compaAble'with'their'device' •
Tes:light'has'metrics'(sessions'and'crashes) • Data'available'by'tester. • App'bundle'can'specify'encrypAon'seGng
Limit%changes • 6#external#builds#a#day# • 100#ac4ve#apps • expira4on#to#60#days • 25#internal#testers/app •
2000#external#testers/app
User%Management • User&segmenta,on&for&users&iTunesConnect • New&Roles& • app&manager • Developer •
Marke,ng
Transporter Command'line'tool • App$meta$data$in$an$xml$feed$(not$new) • XML$6>$transporter$6>$catch$return • Binary$s?ll$uses$the$uploader$(or$xcode)
Other • Common&app&rejec-on&page • App&store&product&page&guide • App&preview&guide
Wrap%up
Miscellaneous • XCode'support'crash'repor0ng. • Storyboards'have'been'improved'with'support'for'mul0ple'files' without'hackey'custom'transi0ons • CoreData'has'be@er'support'for'async'behavior' (NSAsynchronousFetchRequest) •
CoreData'will'allow'a'uniqueness'constraint'across'a'set'of'columns • Session'226'on'opera0ons'explains'what'I’ve'been'advoca0ng'for'in' terms'of'refactoring'our'network'stack.'
Final&recommenda-ons • Adopt'Xcode'server'for'CI.'Even'run'on'the'beta'and'file'radars • Begin'to'adopt'swi>'for'some'new'code. • Adopt'nullability'now'in'new'code,'and'where'touching'old'code • Adopt'generics'when'available'in'new'code'and'when'touching'old'code. •
Migrate'exisDng'watch'app'to'2.0,'but'maintain'funcDonality • Prepare'for'iOS'9'by'using'Contacts'framework'where'it’s'available • Need'to'use'a'clean'runDme'check. • ConDnue'discussion'about'how'we'should'use'TesOlight
Zanier'ideas • Explore)doing)a)complica1on • See)what)we)can)do)to)revive)the)original)watchkit)app)idea.) (Passbook?) • Use)playground)improvements)for)an)API)doc)in)swiE