Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modularizing your iOS apps

Modularizing your iOS apps

Originally posted here: https://speakerdeck.com/alexandervoronov/modularizing-your-ios-apps

Github link: https://github.com/cocoaheads-kyiv-14-workshop

Воркшоп включает в себя:
- Причины для разделения iOS-приложения на модули
- Инструменты для быстрого и простого разделения
- Подходы при проектировании модульного приложения
- Преимущества и недостатки разделения на модули
- Критерии, которые сигнализируют о том, что лучше вернуться к монолиту

This workshop was made for CocoaHeads Kyiv #14 which took place Oct 6 2018.

CocoaHeads Ukraine

October 06, 2018
Tweet

More Decks by CocoaHeads Ukraine

Other Decks in Programming

Transcript

  1. MODULARIZING
    YOUR IOS APPS
    WORKSHOP
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  2. AGENDA
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  3. REASONS
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  4. TARGET TEAMS
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  5. QUICKLY INTRODUCE
    NEW TEAM MEMBERS
    !"
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  6. INDEPENDENT FEATURES
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  7. COMPLEX CONTEXT
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  8. REUSABLE COMPONENTS
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  9. COMPILATION TIME*
    * Analyze your code first: -Xfrontend -warn-long-expression-type-checking=200
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  10. !
    BENEFITS
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  11. YOUR TEAM – YOUR RULES
    ▸ Own processes
    ▸ Own development flow
    ▸ Less merge conflicts
    ▸ Only your changes
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  12. SMALLER FEEDBACK CYCLE

    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  13. EASIER TO TEST
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  14. EASIER TO REASON ABOUT
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  15. EASIER TO INTEGRATE
    IN DIFFERENT ENVIRONMENT
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  16. !
    EXPERIMENTING
    ▸ Language
    ▸ System Design
    ▸ Technologies
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  17. DRAWBACKS
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  18. INTEGRATIONS
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  19. LESS INVOLVEMENT
    IN OTHER MODULES
    ! "
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  20. HOT-PATCHING
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  21. RESOURCES MANAGEMENT
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  22. TIPS & TRICKS
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  23. !
    WHERE TO START?
    ▸ Non Vital
    ▸ Least Dependent (Analytics, Logging, Utils, Networking)
    ▸ Just Copy-Paste
    ▸ Gradually Integrate alongside Original Implementation
    ▸ Deprecating vs Removing
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  24. WALKING SKELETON FIRST

    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  25. SLOWLY
    INTRODUCE IT
    TO YOUR TEAM
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  26. LOCAL

    REPO
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  27. VERSIONING
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  28. CODE REVIEW
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  29. S O L I D
    ▸ Private / Internal by Default
    ▸ Add / Open things ONLY when needed
    ▸ Composition vs Inheritance
    ▸ Invert Dependencies
    ▸ Extending vs Changing
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  30. @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  31. TOOLKIT
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  32. GIT SUBMODULES
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  33. SWIFT PACKAGE MANAGER
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  34. CARTHAGE
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  35. COCOAPODS
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  36. !
    MONOLITH?
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  37. SMALL PROJECT
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  38. SMALL FEATURE
    ...
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  39. SMALL FEATURE
    NOT REUSABLE UTILITY
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  40. FEATURE & PROJECT
    ARE TIGHTLY COUPLED !
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  41. FEATURE STAGE
    DEVELOPMENT → SUPPORTING
    !
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  42. YOU’RE A SMALL STARTUP
    IN ITS EARLY STAGE
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  43. LET'S CODE!
    GITHUB.COM/COCOAHEADS-KYIV-14-WORKSHOP
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide

  44. THANKS!
    @ALEKS_VORONOV
    @aleks_voronov • CocoaHeadsKyiv#14

    View Slide