SlideShare a Scribd company logo
1 of 40
Download to read offline
LET’S WEAVE YOUR APPLICATION
COCOAHEADS MONTRÉAL 2017/09/21
THIBAULT WITTEMBERG - MOBILE ARCHITECT AT SAVOIR-FAIRE LINUX
THE FACTS
REGARDING NAVIGATION WITHIN AN IOS APPLICATION,
TWO CHOICES ARE AVAILABLE:
USE THE BUILT-IN MECHANISMS PROVIDED BY APPLE AND XCODE:
STORYBOARDS AND SEGUES
IMPLEMENT A CUSTOM MECHANISM DIRECTLY IN THE CODE
The Facts
LET’S WEAVE YOUR APPLICATION: WHAT IS IT ABOUT ?
LET’S WEAVE YOUR APPLICATION: WHAT IS IT ABOUT ?
THE DRAWBACKS
Built-in mechanisms
Custom mechanisms
Navigation is relatively static
Storyboards are massive / hard to collaborate
The navigation code pollutes the VCs
Difficult to do Dependency Injection
Can be complex to set up
Can be hard to understand for new teammates
Which pattern ? (Flow Coordinator / Router / Redux)
LET’S WEAVE YOUR APPLICATION: WHAT IS IT ABOUT ?
WHAT WOULD WE LIKE TO ACHIEVE ?
Promote the cutting of storyboards into atomic units
Reuse VCs within different navigation contexts
Ease the implementation of Dependency Injection
Remove navigation code from VCs
Promote Reactive Programming
Describe the navigation in a more declarative way
Cut our application into logical units of navigation
HE’S DEAD, JIM !
Doctor McCoy - StarTrek
LET’S WEAVE YOUR APPLICATION
Step 1: Reusable
Step 2: Flow coordinator
Step 3: Reactive programming
Final step: Weavy and the weaving pattern
« THESE ACHIEVEMENTS ARE COMPLETED STEP BY STEP THROUGH A JOURNEY THAT
LEADS US TO THE IDEA OF A WEAVING PATTERN »
REUSABLE
STEP 1
LET’S WEAVE YOUR APPLICATION: REUSABLE
Lightweight OS API
by Olivier Halligon
Protocol Oriented Programming
Instantiates VC
in a type safe way
LET’S WEAVE YOUR APPLICATION: REUSABLE
1 VC per Storyboard
Super easy to instantiate in code
LET’S WEAVE YOUR APPLICATION: REUSABLE
Promote the cutting of storyboards into atomic units
Reuse VCs within different navigation contexts
WE ALREADY HAVE 2 ACHIEVEMENTS
FLOW
COORDINATOR
STEP 2
LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
Composition Pattern
Great for navigation
structuration
Acts like a black box
VCs are not aware of their navigation context
Instantiates VCs
Great for separation of concerns
Great with Reusable API
Great for DI
LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
Main flow - Navigation stack
Settings - root
Dashboard - push
Wishlist flow - Navigation stack
Movies list - root
Movie detail - push
Cast detail - push
Settings - popup
Watched flow - Navigation stack
Movies collection - root
Movie detail - push
LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
MainCoordinator
SettingsVC
TabBarVC
NavigationVCRoot
Push
Push
WatchedCoordinator
MoviesCollecVC
MovieDetailVC
NavigationVC
Push
Push
MoviesListVC
MovieDetailVC
CastDetailVC
NavigationVC
SettingsVC
WishlistCoordinator
Push
Push
Push
Present
LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
4
LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
5
LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
3 MORE ACHIEVEMENTS
Ease the implementation of Dependency Injection
Remove navigation code from VCs
Cut our application into logical units of navigation
Boring repetitive code
Still some boilerplate code (delegation)
REACTIVE
PROGRAMMING
STEP 3
LET’S WEAVE YOUR APPLICATION: REACTIVE PROGRAMMING
Easy to expose states
and propagate state
changes
Adopted by many developers
Fits well with MVVM for instance, which I like
Avoid delegation pattern
And Notification Center
LET’S WEAVE YOUR APPLICATION: REACTIVE PROGRAMMING
Observable
Observer
LET’S WEAVE YOUR APPLICATION: REACTIVE PROGRAMMING
1 ESSENTIAL ACHIEVEMENT
Promote Reactive Programming
LET’S WEAVE YOUR APPLICATION: ON THE ROAD TO THE WEAVING PATTERN
SOMETHING IS BEGINNING TO EMERGE !
We know how to cut StoryBoards and reuse
ViewControllers (Reusable)
We know how to orchestrate navigation and
isolate navigation code from Views (Coordinator)
We know how to express and propagate a change
of state (Reactive)
LET’S WEAVE YOUR APPLICATION: ON THE ROAD TO THE WEAVING PATTERN
ONLY 1 ACHIEVEMENT LEFT
Describe the navigation in a more declarative way
THE WEAVING
PATTERN
FINAL STEP: WEAVY
« WEAVING INVOLVES USING A LOOM TO INTERLACE TWO SETS OF
THREADS AT RIGHT ANGLES TO EACH OTHER: THE WARP WHICH
RUNS LONGITUDINALLY AND THE WEFT THAT CROSSES IT [...] CLOTH
IS USUALLY WOVEN ON A LOOM, A DEVICE THAT HOLDS THE WARP
THREADS IN PLACE WHILE FILLING WEFTS ARE WOVEN THROUGH
THEM »
Weaving from Wikipedia
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
Warp
Weft
Loom
Stitch
Warp Warp
Weft
Weft
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
MainFlow
Settings
Coordinator
SettingsVC
(pushed)
WishlistFlow WatchedFlow
MovieList
MovieDetail
SettingsVC
(poped up)
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
MainFlow
Settings
Coordinator
SettingsVC
(pushed)
WishlistFlow WatchedFlow
MovieList MovieDetail
SettingsVC
(poped up)
Reusable
Reactive
(navigate)
(instantiate)
(state changes)
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
Weavy OpenSource
framework (WIP)
Build on top of the 3 steps seen before
but without the boring and boilerplate code
Not related to a
specific pattern
(MVVM, MVP, MVC)
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
THE LAST ACHIEVEMENT
Describe the navigation in a more declarative way
Weavy doesn’t rely on a centralized navigation state but on a
distributed state spread across the application
Weavy uses abstraction and protocols, it does not freeze your inheritance
tree
LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
WEAVY FITS WELL IF:
WEAVY DOESN’T FITS WELL IF:
GIVE IT A TRY (CONTRIBUTIONS ARE WELCOMED):
Github: https://github.com/twittemb/Weavy
Twitter: #thwittem
You need to do a 2-screen app (would be overkill)
Your application has a complex navigation flow
The navigation is dynamic, depending on business rules
You are already working with RxSwift
QUESTIONS ?
COCOAHEADS MONTRÉAL 2017/09/21
THANK YOU

More Related Content

Similar to Declarative Navigation with Weavy Framework

Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry BootcampAndy Piper
 
Cloud Native: Designing Change-tolerant Software
Cloud Native: Designing Change-tolerant SoftwareCloud Native: Designing Change-tolerant Software
Cloud Native: Designing Change-tolerant Softwarecornelia davis
 
The Cloud Foundry bootcamp talk from SpringOne On The Road - Europe
The Cloud Foundry bootcamp talk from SpringOne On The Road - EuropeThe Cloud Foundry bootcamp talk from SpringOne On The Road - Europe
The Cloud Foundry bootcamp talk from SpringOne On The Road - EuropeJoshua Long
 
Cloud-Native Workshop - Santa Monica
Cloud-Native Workshop - Santa Monica Cloud-Native Workshop - Santa Monica
Cloud-Native Workshop - Santa Monica VMware Tanzu
 
A Cloud Native Platform - Cloud Native Day Santa Monica
A Cloud Native Platform - Cloud Native Day Santa MonicaA Cloud Native Platform - Cloud Native Day Santa Monica
A Cloud Native Platform - Cloud Native Day Santa MonicaDustin Ruehle
 
CloudStack and NFV
CloudStack and NFVCloudStack and NFV
CloudStack and NFVShapeBlue
 
PHP Buildpacks in the Cloud on Bluemix
PHP Buildpacks in the Cloud on BluemixPHP Buildpacks in the Cloud on Bluemix
PHP Buildpacks in the Cloud on BluemixIBM
 
Cloud Foundry for PHP developers
Cloud Foundry for PHP developersCloud Foundry for PHP developers
Cloud Foundry for PHP developersDaniel Krook
 
Continuously serving the OSS community with Continuous Integration and Delive...
Continuously serving the OSS community with Continuous Integration and Delive...Continuously serving the OSS community with Continuous Integration and Delive...
Continuously serving the OSS community with Continuous Integration and Delive...Thoughtworks
 
FISL 15: Continuously serving the OSS community with Continuous Integration a...
FISL 15: Continuously serving the OSS community with Continuous Integration a...FISL 15: Continuously serving the OSS community with Continuous Integration a...
FISL 15: Continuously serving the OSS community with Continuous Integration a...Akshay Karle
 
Developer-Friendly CI / CD for Kubernetes
Developer-Friendly CI / CD for KubernetesDeveloper-Friendly CI / CD for Kubernetes
Developer-Friendly CI / CD for KubernetesDevOps Indonesia
 
Continuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSContinuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSDanilo Poccia
 
To the cloud...
To the cloud...To the cloud...
To the cloud...AppZero
 
Tastypie: Easy APIs to Make Your Work Easier
Tastypie: Easy APIs to Make Your Work EasierTastypie: Easy APIs to Make Your Work Easier
Tastypie: Easy APIs to Make Your Work EasierHarvard Web Working Group
 
vSphere with Tanzu Tech Overview 7.0 U1 (1).pptx
vSphere with Tanzu Tech Overview 7.0 U1 (1).pptxvSphere with Tanzu Tech Overview 7.0 U1 (1).pptx
vSphere with Tanzu Tech Overview 7.0 U1 (1).pptxhokismen
 
Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...Grid Dynamics
 
Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...Grid Dynamics
 
Practical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusPractical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusJarrod Overson
 
Tackling Umbraco: Case Study on NFL Ops Website Design
Tackling Umbraco: Case Study on NFL Ops Website DesignTackling Umbraco: Case Study on NFL Ops Website Design
Tackling Umbraco: Case Study on NFL Ops Website Designmcampolongo
 

Similar to Declarative Navigation with Weavy Framework (20)

Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry Bootcamp
 
Cloud Native: Designing Change-tolerant Software
Cloud Native: Designing Change-tolerant SoftwareCloud Native: Designing Change-tolerant Software
Cloud Native: Designing Change-tolerant Software
 
The Cloud Foundry bootcamp talk from SpringOne On The Road - Europe
The Cloud Foundry bootcamp talk from SpringOne On The Road - EuropeThe Cloud Foundry bootcamp talk from SpringOne On The Road - Europe
The Cloud Foundry bootcamp talk from SpringOne On The Road - Europe
 
Cloud-Native Workshop - Santa Monica
Cloud-Native Workshop - Santa Monica Cloud-Native Workshop - Santa Monica
Cloud-Native Workshop - Santa Monica
 
A Cloud Native Platform - Cloud Native Day Santa Monica
A Cloud Native Platform - Cloud Native Day Santa MonicaA Cloud Native Platform - Cloud Native Day Santa Monica
A Cloud Native Platform - Cloud Native Day Santa Monica
 
CloudStack and NFV
CloudStack and NFVCloudStack and NFV
CloudStack and NFV
 
PHP Buildpacks in the Cloud on Bluemix
PHP Buildpacks in the Cloud on BluemixPHP Buildpacks in the Cloud on Bluemix
PHP Buildpacks in the Cloud on Bluemix
 
Cloud Foundry for PHP developers
Cloud Foundry for PHP developersCloud Foundry for PHP developers
Cloud Foundry for PHP developers
 
Continuously serving the OSS community with Continuous Integration and Delive...
Continuously serving the OSS community with Continuous Integration and Delive...Continuously serving the OSS community with Continuous Integration and Delive...
Continuously serving the OSS community with Continuous Integration and Delive...
 
FISL 15: Continuously serving the OSS community with Continuous Integration a...
FISL 15: Continuously serving the OSS community with Continuous Integration a...FISL 15: Continuously serving the OSS community with Continuous Integration a...
FISL 15: Continuously serving the OSS community with Continuous Integration a...
 
Developer-Friendly CI / CD for Kubernetes
Developer-Friendly CI / CD for KubernetesDeveloper-Friendly CI / CD for Kubernetes
Developer-Friendly CI / CD for Kubernetes
 
Continuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSContinuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWS
 
To the cloud...
To the cloud...To the cloud...
To the cloud...
 
Tastypie: Easy APIs to Make Your Work Easier
Tastypie: Easy APIs to Make Your Work EasierTastypie: Easy APIs to Make Your Work Easier
Tastypie: Easy APIs to Make Your Work Easier
 
vSphere with Tanzu Tech Overview 7.0 U1 (1).pptx
vSphere with Tanzu Tech Overview 7.0 U1 (1).pptxvSphere with Tanzu Tech Overview 7.0 U1 (1).pptx
vSphere with Tanzu Tech Overview 7.0 U1 (1).pptx
 
Kubernetes 1001
Kubernetes 1001Kubernetes 1001
Kubernetes 1001
 
Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...
 
Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...Best practices for enterprise-grade microservices implementations with Google...
Best practices for enterprise-grade microservices implementations with Google...
 
Practical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobusPractical WebAssembly with Apex, wasmRS, and nanobus
Practical WebAssembly with Apex, wasmRS, and nanobus
 
Tackling Umbraco: Case Study on NFL Ops Website Design
Tackling Umbraco: Case Study on NFL Ops Website DesignTackling Umbraco: Case Study on NFL Ops Website Design
Tackling Umbraco: Case Study on NFL Ops Website Design
 

Declarative Navigation with Weavy Framework

  • 1. LET’S WEAVE YOUR APPLICATION COCOAHEADS MONTRÉAL 2017/09/21 THIBAULT WITTEMBERG - MOBILE ARCHITECT AT SAVOIR-FAIRE LINUX
  • 3. REGARDING NAVIGATION WITHIN AN IOS APPLICATION, TWO CHOICES ARE AVAILABLE: USE THE BUILT-IN MECHANISMS PROVIDED BY APPLE AND XCODE: STORYBOARDS AND SEGUES IMPLEMENT A CUSTOM MECHANISM DIRECTLY IN THE CODE The Facts LET’S WEAVE YOUR APPLICATION: WHAT IS IT ABOUT ?
  • 4. LET’S WEAVE YOUR APPLICATION: WHAT IS IT ABOUT ? THE DRAWBACKS Built-in mechanisms Custom mechanisms Navigation is relatively static Storyboards are massive / hard to collaborate The navigation code pollutes the VCs Difficult to do Dependency Injection Can be complex to set up Can be hard to understand for new teammates Which pattern ? (Flow Coordinator / Router / Redux)
  • 5. LET’S WEAVE YOUR APPLICATION: WHAT IS IT ABOUT ? WHAT WOULD WE LIKE TO ACHIEVE ? Promote the cutting of storyboards into atomic units Reuse VCs within different navigation contexts Ease the implementation of Dependency Injection Remove navigation code from VCs Promote Reactive Programming Describe the navigation in a more declarative way Cut our application into logical units of navigation
  • 6. HE’S DEAD, JIM ! Doctor McCoy - StarTrek
  • 7. LET’S WEAVE YOUR APPLICATION Step 1: Reusable Step 2: Flow coordinator Step 3: Reactive programming Final step: Weavy and the weaving pattern « THESE ACHIEVEMENTS ARE COMPLETED STEP BY STEP THROUGH A JOURNEY THAT LEADS US TO THE IDEA OF A WEAVING PATTERN »
  • 9. LET’S WEAVE YOUR APPLICATION: REUSABLE Lightweight OS API by Olivier Halligon Protocol Oriented Programming Instantiates VC in a type safe way
  • 10. LET’S WEAVE YOUR APPLICATION: REUSABLE 1 VC per Storyboard Super easy to instantiate in code
  • 11. LET’S WEAVE YOUR APPLICATION: REUSABLE Promote the cutting of storyboards into atomic units Reuse VCs within different navigation contexts WE ALREADY HAVE 2 ACHIEVEMENTS
  • 13. LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR Composition Pattern Great for navigation structuration Acts like a black box VCs are not aware of their navigation context Instantiates VCs Great for separation of concerns Great with Reusable API Great for DI
  • 14. LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR Main flow - Navigation stack Settings - root Dashboard - push Wishlist flow - Navigation stack Movies list - root Movie detail - push Cast detail - push Settings - popup Watched flow - Navigation stack Movies collection - root Movie detail - push
  • 15. LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR MainCoordinator SettingsVC TabBarVC NavigationVCRoot Push Push WatchedCoordinator MoviesCollecVC MovieDetailVC NavigationVC Push Push MoviesListVC MovieDetailVC CastDetailVC NavigationVC SettingsVC WishlistCoordinator Push Push Push Present
  • 16. LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
  • 17. LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
  • 18. LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR
  • 19. LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR 4
  • 20. LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR 5
  • 21. LET’S WEAVE YOUR APPLICATION: FLOW COORDINATOR 3 MORE ACHIEVEMENTS Ease the implementation of Dependency Injection Remove navigation code from VCs Cut our application into logical units of navigation Boring repetitive code Still some boilerplate code (delegation)
  • 23. LET’S WEAVE YOUR APPLICATION: REACTIVE PROGRAMMING Easy to expose states and propagate state changes Adopted by many developers Fits well with MVVM for instance, which I like Avoid delegation pattern And Notification Center
  • 24. LET’S WEAVE YOUR APPLICATION: REACTIVE PROGRAMMING Observable Observer
  • 25. LET’S WEAVE YOUR APPLICATION: REACTIVE PROGRAMMING 1 ESSENTIAL ACHIEVEMENT Promote Reactive Programming
  • 26. LET’S WEAVE YOUR APPLICATION: ON THE ROAD TO THE WEAVING PATTERN SOMETHING IS BEGINNING TO EMERGE ! We know how to cut StoryBoards and reuse ViewControllers (Reusable) We know how to orchestrate navigation and isolate navigation code from Views (Coordinator) We know how to express and propagate a change of state (Reactive)
  • 27. LET’S WEAVE YOUR APPLICATION: ON THE ROAD TO THE WEAVING PATTERN ONLY 1 ACHIEVEMENT LEFT Describe the navigation in a more declarative way
  • 29. « WEAVING INVOLVES USING A LOOM TO INTERLACE TWO SETS OF THREADS AT RIGHT ANGLES TO EACH OTHER: THE WARP WHICH RUNS LONGITUDINALLY AND THE WEFT THAT CROSSES IT [...] CLOTH IS USUALLY WOVEN ON A LOOM, A DEVICE THAT HOLDS THE WARP THREADS IN PLACE WHILE FILLING WEFTS ARE WOVEN THROUGH THEM » Weaving from Wikipedia LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
  • 30. LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN Warp Weft Loom Stitch Warp Warp Weft Weft
  • 31. LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN MainFlow Settings Coordinator SettingsVC (pushed) WishlistFlow WatchedFlow MovieList MovieDetail SettingsVC (poped up)
  • 32. LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN MainFlow Settings Coordinator SettingsVC (pushed) WishlistFlow WatchedFlow MovieList MovieDetail SettingsVC (poped up) Reusable Reactive (navigate) (instantiate) (state changes)
  • 33. LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN Weavy OpenSource framework (WIP) Build on top of the 3 steps seen before but without the boring and boilerplate code Not related to a specific pattern (MVVM, MVP, MVC)
  • 34. LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
  • 35. LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
  • 36. LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
  • 37. LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN
  • 38. LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN THE LAST ACHIEVEMENT Describe the navigation in a more declarative way Weavy doesn’t rely on a centralized navigation state but on a distributed state spread across the application Weavy uses abstraction and protocols, it does not freeze your inheritance tree
  • 39. LET’S WEAVE YOUR APPLICATION: WEAVY AND THE WEAVING PATTERN WEAVY FITS WELL IF: WEAVY DOESN’T FITS WELL IF: GIVE IT A TRY (CONTRIBUTIONS ARE WELCOMED): Github: https://github.com/twittemb/Weavy Twitter: #thwittem You need to do a 2-screen app (would be overkill) Your application has a complex navigation flow The navigation is dynamic, depending on business rules You are already working with RxSwift
  • 40. QUESTIONS ? COCOAHEADS MONTRÉAL 2017/09/21 THANK YOU