dynamic, native, backend-driven uis - app builders 2016

27
Dynamic, native, backend-driven UIs John Sundell Lead iOS Developer @johnsundell

Upload: john-sundell

Post on 08-Jan-2017

1.659 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Dynamic, native, backend-driven UIs - App Builders 2016

Dynamic, native, backend-driven UIs

John Sundell

Lead iOS Developer@johnsundell

Page 2: Dynamic, native, backend-driven UIs - App Builders 2016

Dynamic Native

Backend-driven

Page 3: Dynamic, native, backend-driven UIs - App Builders 2016

“What if we changed this list to a grid?”

Page 4: Dynamic, native, backend-driven UIs - App Builders 2016

Layout changesContent changes

A/B testingShip fast

Page 5: Dynamic, native, backend-driven UIs - App Builders 2016

Changing our UI and content was too slow

Page 6: Dynamic, native, backend-driven UIs - App Builders 2016

Card Backend

Feature

Page 7: Dynamic, native, backend-driven UIs - App Builders 2016

Card Backend

Feature

Create View Controller

Setup container view

Register card

Load data

Handle offline

Backend request

Parse response

Handle errors or timeouts

Cache

Bind data to cards

Handle highlights & selection

Integrate View Controller with the rest of the app

Page 8: Dynamic, native, backend-driven UIs - App Builders 2016

Card Backend

Feature

Components

Content providers

Page 9: Dynamic, native, backend-driven UIs - App Builders 2016

{

“id”: “b2ks8shS”,

“name”: “Indie Highlights”,

“followers”: 55

}

{

“component”: “card”,

“title”: “Indie Highlights”,

“subtitle”: “55 FOLLOWERS”,

“uri”: “spotify:playlist:b2ks8shS”

}

Playlist ComponentModel

Data binding

Not reusable Reusable

Page 10: Dynamic, native, backend-driven UIs - App Builders 2016

“card”

“card”

“components”: [ { “component”: “card” … }, { “component”: “card” … }, { “component”: … }, { “component”: … } ]

View Model

Page 11: Dynamic, native, backend-driven UIs - App Builders 2016

“components”: [ { “component”: “card” … }, { “component”: “card” … }, { “component”: … }, { “component”: … } ]

“row”

“row”

View Model

Page 12: Dynamic, native, backend-driven UIs - App Builders 2016

Component driven UI development

Page 13: Dynamic, native, backend-driven UIs - App Builders 2016

Built-in reusability

Page 14: Dynamic, native, backend-driven UIs - App Builders 2016

Content providers

Page 15: Dynamic, native, backend-driven UIs - App Builders 2016

View URI

spotify:playlist:b2ks8shS

[UIApplication openURL:]

Page 16: Dynamic, native, backend-driven UIs - App Builders 2016

View URI

spotify:playlist:b2ks8shS

Content Provider Registry

Content provider

Content provider

Content provider

Page 17: Dynamic, native, backend-driven UIs - App Builders 2016

View Model Builder

Content provider

Content provider

Content provider

Core data models Cached dataBackend

Page 18: Dynamic, native, backend-driven UIs - App Builders 2016

View Model Builder

Content provider

Content provider

Content provider

Core data models Cached dataBackend

JSON

Page 19: Dynamic, native, backend-driven UIs - App Builders 2016

View Model Builder

Content provider

Content provider

Content provider

Core data models Cached dataBackend

JSON Code

Page 20: Dynamic, native, backend-driven UIs - App Builders 2016

View Model Builder

Content provider

Content provider

Content provider

Core data models Cached dataBackend

JSON Code Code / JSON

Page 21: Dynamic, native, backend-driven UIs - App Builders 2016

View Model Builder

Content provider

Content provider

Content provider

Core data models Cached dataBackend

JSON Code Code / JSON

View model

Page 22: Dynamic, native, backend-driven UIs - App Builders 2016

View model Component Models

Components / Views Content

Page 23: Dynamic, native, backend-driven UIs - App Builders 2016

Content driven architecture

Page 24: Dynamic, native, backend-driven UIs - App Builders 2016

Layout

Page 25: Dynamic, native, backend-driven UIs - App Builders 2016

Carousel

Navigation row

Section headerCategory card

Entity card

UICollectionView

Layout traits: [Full width]

Layout traits: [Full width, Stackable]

Layout traits: [Full width, Divider]

Layout traits: [Compact width]

Layout traits: [Compact width]

Page 26: Dynamic, native, backend-driven UIs - App Builders 2016

This is just the beginning ;)

Page 27: Dynamic, native, backend-driven UIs - App Builders 2016

@johnsundell

Thank you! :)