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.

Db84cf61fdada06b63f43f310b68b462?s=128

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

  2. AGENDA @aleks_voronov • CocoaHeadsKyiv#14

  3. REASONS @aleks_voronov • CocoaHeadsKyiv#14

  4. TARGET TEAMS @aleks_voronov • CocoaHeadsKyiv#14

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

  6. INDEPENDENT FEATURES @aleks_voronov • CocoaHeadsKyiv#14

  7. COMPLEX CONTEXT @aleks_voronov • CocoaHeadsKyiv#14

  8. REUSABLE COMPONENTS @aleks_voronov • CocoaHeadsKyiv#14

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

    • CocoaHeadsKyiv#14
  10. ! BENEFITS @aleks_voronov • CocoaHeadsKyiv#14

  11. YOUR TEAM – YOUR RULES ▸ Own processes ▸ Own

    development flow ▸ Less merge conflicts ▸ Only your changes @aleks_voronov • CocoaHeadsKyiv#14
  12. SMALLER FEEDBACK CYCLE ⏱ @aleks_voronov • CocoaHeadsKyiv#14

  13. EASIER TO TEST @aleks_voronov • CocoaHeadsKyiv#14

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

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

  16. ! EXPERIMENTING ▸ Language ▸ System Design ▸ Technologies @aleks_voronov

    • CocoaHeadsKyiv#14
  17. DRAWBACKS @aleks_voronov • CocoaHeadsKyiv#14

  18. INTEGRATIONS @aleks_voronov • CocoaHeadsKyiv#14

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

  20. HOT-PATCHING @aleks_voronov • CocoaHeadsKyiv#14

  21. RESOURCES MANAGEMENT @aleks_voronov • CocoaHeadsKyiv#14

  22. TIPS & TRICKS @aleks_voronov • CocoaHeadsKyiv#14

  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
  24. WALKING SKELETON FIRST ☠ @aleks_voronov • CocoaHeadsKyiv#14

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

  26. LOCAL ⚔ REPO @aleks_voronov • CocoaHeadsKyiv#14

  27. VERSIONING @aleks_voronov • CocoaHeadsKyiv#14

  28. CODE REVIEW @aleks_voronov • CocoaHeadsKyiv#14

  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
  30. @aleks_voronov • CocoaHeadsKyiv#14

  31. TOOLKIT @aleks_voronov • CocoaHeadsKyiv#14

  32. GIT SUBMODULES @aleks_voronov • CocoaHeadsKyiv#14

  33. SWIFT PACKAGE MANAGER @aleks_voronov • CocoaHeadsKyiv#14

  34. CARTHAGE @aleks_voronov • CocoaHeadsKyiv#14

  35. COCOAPODS @aleks_voronov • CocoaHeadsKyiv#14

  36. ! MONOLITH? @aleks_voronov • CocoaHeadsKyiv#14

  37. SMALL PROJECT @aleks_voronov • CocoaHeadsKyiv#14

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

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

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

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

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

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

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