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

카카오뱅크 iOS 프로젝트의 모듈화 여정: Tuist를 활용한 모듈 아키텍처 설계 사례

kakao
PRO
December 08, 2022

카카오뱅크 iOS 프로젝트의 모듈화 여정: Tuist를 활용한 모듈 아키텍처 설계 사례

#iOS #생산성

카카오뱅크 iOS 프로젝트 여정을 이야기하고 어떤 문제를 겪었으며,
왜 모듈화를 하게 되었는지,
Tuist를 활용한 모듈 개발 방법 소개,
그리고 iOS 개발팀에서 그리고 있는 아키텍처를
공유하고자 합니다.

발표자 : damon.ahn
카카오뱅크에서 iOS 앱 개발을 하고 있는 데이먼입니다.

kakao
PRO

December 08, 2022
Tweet

More Decks by kakao

Other Decks in Programming

Transcript

  1. উ੿޹ damon.ahn
    ஠஠য়ߛ௼
    Copyright 2022. Kakao Corp. All rights reserved. Redistribution or public display is not permitted without written permission from Kakao.
    ஠஠য়ߛ௼ iOS ೐۽ં౟੄ ݽٕച ৈ੿
    if(kakao)2022
    Tuistܳ ഝਊೠ ݽٕ ইఃఫ୊ ࢸ҅ ࢎ۹

    View Slide

  2. ߊ಴ܳ ా೧ ӝ؀ೞח Ѫ
    • ஠஠য়ߛ௼ iOS ೐۽ં౟੄ ૓೯ ղਊ ҕਬ
    • അ੤ ੘স઺ੋ ݽٕ ইఃఫ୊ ࢸ҅ ҕਬ

    View Slide

  3. ೐۽ં౟ ৈ੿
    ѐߊ ࢤ࢑ࢿ ѐࢶ ߑߨ ঌইࠁӝ
    ஠஠য়ߛ௼ ݽٕ ইఃఫ୊ ࢸ҅

    View Slide

  4. ೐۽ં౟ ৈ੿
    ѐߊ ࢤ࢑ࢿ ѐࢶ ߑߨ ঌইࠁӝ
    ஠஠য়ߛ௼ ݽٕ ইఃఫ୊ ࢸ҅

    View Slide

  5. ೐۽ં౟ ৈ੿

    View Slide

  6. MVVM
    - ੢੼
    - ؘ੉ఠ ߄ੋ٬ਵ۽ UI৬ Model р੄ زӝച
    ইఃఫ୊

    View Slide

  7. MVVM
    - ੢੼
    - ؘ੉ఠ ߄ੋ٬ਵ۽ UI৬ Model р੄ زӝച
    - ױ੼
    - ࠺؀೧૑ח ViewModel ҳઑ
    - ੿ഋചغ૑ ঋ਷ Routing
    ইఃఫ୊

    View Slide

  8. ইఃఫ୊
    - ੢੼
    - ݺഛೠ మ೒݁
    - ೐۽ష௒ ૑ೱ ೐۽Ӓې߁ оמ
    - ਽૘ب ֫਷ ௏٘
    - Routing ӝמ RIBs

    View Slide

  9. ইఃఫ୊
    - ੢੼
    - ݺഛೠ మ೒݁
    - ೐۽ష௒ ૑ೱ ೐۽Ӓې߁ оמ
    - ਽૘ب ֫਷ ௏٘
    - Routing ӝמ RIBs

    View Slide

  10. ইఃఫ୊
    - ੢੼
    - ݺഛೠ మ೒݁
    - ೐۽ష௒ ૑ೱ ೐۽Ӓې߁ оמ
    - ਽૘ب ֫਷ ௏٘
    - Routing ӝמ
    - ױ੼
    - ݆਷ ౵ੌ ࢤࢿ
    RIBs
    যࢲয়ࣁਃ RIBsੑפ׮. ஠஠য়ಕ੉ ࠺ૉפझজ ѐߊӝ if(kakao)2020

    View Slide

  11. 16֙
    700ѐ ౵ੌ
    6݅઴
    17֙
    1,600ѐ ౵ੌ
    23݅઴
    18֙
    2,400ѐ ౵ੌ
    34݅઴
    4,700ѐ ౵ੌ
    56݅઴
    19֙
    16~20֙ 12.31 ӝળ
    MVVM RIBs
    ೐۽ં౟ ӏݽ

    View Slide

  12. 16֙
    700ѐ ౵ੌ
    6݅઴
    17֙
    1,600ѐ ౵ੌ
    23݅઴
    18֙
    2,400ѐ ౵ੌ
    34݅઴
    4,700ѐ ౵ੌ
    56݅઴
    19֙
    6,700ѐ ౵ੌ
    74݅઴
    20֙
    16~20֙ 12.31 ӝળ
    MVVM RIBs
    ೐۽ં౟ ӏݽ

    View Slide

  13. 11,000ѐ ౵ੌ
    104݅઴
    2022.08.31 ӝળ

    View Slide

  14. Ѿ೤ب ૐо
    ࣚऔѱ ௏٘ ੽Ӕ

    View Slide

  15. Ѿ೤ب ૐо
    ࣚऔѱ ௏٘ ੽Ӕ
    ࠽٘ ޙઁ
    ࠽٘ दр ૐо, ࠽٘ पಁ

    View Slide

  16. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ѐߊदр
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ೐۽ં౟ ӏݽ

    View Slide

  17. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ѐߊदр
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ೐۽ં౟ ӏݽ

    View Slide

  18. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ѐߊदр
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ௏٘ ૐо
    Ѿ೤ب ૐо
    ೐۽ં౟ ӏݽ

    View Slide

  19. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ѐߊदр
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ௏٘ ૐо
    Ѿ೤ب ૐо
    ࠽٘ दр ૐо
    ೐۽ં౟ ӏݽ

    View Slide

  20. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ѐߊदр
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ௏٘ ૐо
    Ѿ೤ب ૐо
    ਬ૑ࠁࣻ ࠺ਊ ૐо
    Ӕޖदр ૐо
    పझ౟ ੘ࢿ য۰਑ ࠽٘ दр ૐо
    ೐۽ં౟ ӏݽ

    View Slide

  21. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ѐߊदр
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ௏٘ ૐо
    Ѿ೤ب ૐо
    ਬ૑ࠁࣻ ࠺ਊ ૐо
    Ӕޖदр ૐо
    పझ౟ ੘ࢿ য۰਑
    ѐߊ ৮ܐ
    ࠽٘ दр ૐо
    ೐۽ં౟ ӏݽ

    View Slide

  22. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ѐߊदр
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ௏٘ ૐо
    Ѿ೤ب ૐо
    ਬ૑ࠁࣻ ࠺ਊ ૐо
    Ӕޖदр ૐо
    పझ౟ ੘ࢿ য۰਑
    ѐߊ ৮ܐ
    ࠽٘ दр ૐо
    ೐۽ં౟ ӏݽ

    View Slide

  23. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ѐߊदр
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ௏٘ ૐо
    Ѿ೤ب ૐо
    ਬ૑ࠁࣻ ࠺ਊ ૐо
    Ӕޖदр ૐо
    పझ౟ ੘ࢿ য۰਑
    ѐߊ ৮ܐ
    ࠽٘ दр ૐо
    ೐۽ં౟ ӏݽ

    View Slide

  24. ݽٕച
    ݽٕ۽ ѐߊೡ ࣻ ੓׮ݶ ೧Ѿೡ ࣻ ੓૑ ঋਸө?

    View Slide

  25. 17֙
    3ѐ ݽٕ
    1,600ѐ ౵ੌ
    23݅઴
    18֙
    8ѐ ݽٕ
    2,400ѐ ౵ੌ
    34݅઴
    27ѐ ݽٕ
    4,700ѐ ౵ੌ
    56݅઴
    19֙
    43ѐ ݽٕ
    6,700ѐ ౵ੌ
    74݅઴
    20֙
    49ѐ ݽٕ
    10,000ѐ ౵ੌ
    99݅઴
    21֙
    17~21֙ 12.31 ӝળ
    ೐۽ં౟ ӏݽ

    View Slide

  26. 17֙
    3ѐ ݽٕ
    1,600ѐ ౵ੌ
    23݅઴
    18֙
    8ѐ ݽٕ
    2,400ѐ ౵ੌ
    34݅઴
    27ѐ ݽٕ
    4,700ѐ ౵ੌ
    56݅઴
    19֙
    43ѐ ݽٕ
    6,700ѐ ౵ੌ
    74݅઴
    20֙
    49ѐ ݽٕ
    10,000ѐ ౵ੌ
    99݅઴
    21֙
    17~21֙ 12.31 ӝળ
    ೐۽ં౟ ӏݽ

    View Slide

  27. View Slide

  28. View Slide

  29. بҳ ࢎਊ మ೒݁
    ࠂ੟ೠ ࢸ੿ ҙܻ ೐۽ં౟ ࢤࢿ ߂ ӏѺച

    View Slide

  30. ݽٕ 110ѐ
    2022.08.31 ӝળ

    View Slide

  31. ݽٕ 110ѐ
    2022.08.31 ӝળ

    View Slide

  32. ݽٕ 110ѐ
    2022.08.31 ӝળ

    View Slide

  33. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ݽٕ ࣻ
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ೐۽ં౟ ӏݽ

    View Slide

  34. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ݽٕ ࣻ
    ૐо
    ܻࣗझ ࠗ઒
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ೐۽ં౟ ӏݽ

    View Slide

  35. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ݽٕ ࣻ
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ௏٘ ૐо
    ೐۽ં౟ ӏݽ

    View Slide

  36. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ݽٕ ࣻ
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ௏٘ ૐо
    ݽٕ ѐߊ
    ೐۽ં౟ ӏݽ

    View Slide

  37. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ݽٕ ࣻ
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ௏٘ ૐо
    ݽٕ ѐߊ
    ࡅܲ ૐ࠙࠽٘
    ࡅܲ ௏٘ प೯
    ؘݽজ ӝ߈ ѐߊ
    ࡅܲ పझ౟ ੘ࢿ
    উ੿੸ੋ ࢚ಿ ѐߊ
    ೐۽ં౟ ӏݽ

    View Slide

  38. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ݽٕ ࣻ
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ௏٘ ૐо
    ݽٕ ѐߊ
    ࡅܲ ૐ࠙࠽٘
    ࡅܲ ௏٘ प೯
    ؘݽজ ӝ߈ ѐߊ
    ࡅܲ పझ౟ ੘ࢿ
    উ੿੸ੋ ࢚ಿ ѐߊ
    ೐۽ં౟ ӏݽ

    View Slide

  39. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ݽٕ ࣻ
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ࡅܲ ૐ࠙࠽٘
    ࡅܲ ௏٘ प೯
    ؘݽজ ӝ߈ ѐߊ
    ࡅܲ పझ౟ ੘ࢿ
    উ੿੸ੋ ࢚ಿ ѐߊ
    ѐߊ ৮ܐ
    ݽٕ ѐߊ
    ௏٘ ૐо
    ೐۽ં౟ ӏݽ

    View Slide

  40. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ݽٕ ࣻ
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ѐߊ ৮ܐ
    ௏٘ ૐо
    ݽٕ ѐߊ
    ࡅܲ ૐ࠙࠽٘
    ࡅܲ ௏٘ प೯
    ؘݽজ ӝ߈ ѐߊ
    ࡅܲ పझ౟ ੘ࢿ
    উ੿੸ੋ ࢚ಿ ѐߊ
    ೐۽ં౟ ӏݽ

    View Slide

  41. ೐۽ં౟
    ӏݽ ૐо
    ѐߊ੗ ࣻ
    ૐо
    ݽٕ ࣻ
    ૐо
    ࢜۽਍ ࢚ಿ ѐߊ
    ೐۽ં౟ ਬ૑ࠁࣻ
    ܻࣗझ ࠗ઒
    ѐߊ ৮ܐ
    ௏٘ ૐо
    ݽٕ ѐߊ
    ࡅܲ ૐ࠙࠽٘
    ࡅܲ ௏٘ प೯
    ؘݽজ ӝ߈ ѐߊ
    ࡅܲ పझ౟ ੘ࢿ
    উ੿੸ੋ ࢚ಿ ѐߊ
    ೐۽ં౟ ӏݽ

    View Slide

  42. ݽٕ ઑ݀
    উ੿੸ੋ ӝמ, ࢚ಿ ѐߊ
    ࡅܲ ࠽٘
    UI, ࠺ૉפझ ۽૒ ѐߊ ߂ प೯

    View Slide

  43. Full Incremental Full Incremental Full Incremental
    650s
    250s
    50s
    3s
    118s
    3s
    M1Max ӝળ

    View Slide

  44. Full Incremental Full Incremental Full Incremental
    650s
    250s
    50s
    3s
    118s
    3s
    M1Max ӝળ

    View Slide

  45. ೐۽ં౟ ৈ੿
    ѐߊ ࢤ࢑ࢿ ѐࢶ ߑߨ ঌইࠁӝ
    ஠஠য়ߛ௼ ݽٕ ইఃఫ୊ ࢸ҅

    View Slide

  46. ࢚ಿী ೙ਃೠ ӝמ

    View Slide

  47. ࢚ಿী ೙ਃೠ ӝמ
    UI Business

    View Slide

  48. UI Business
    ࢚ಿী ೙ਃೠ ӝמ

    View Slide

  49. UI Business
    UI
    Component
    Resource
    Popup
    UIHelper
    Network
    Auth
    FDS
    Log
    ࢚ಿী ೙ਃೠ ӝמ

    View Slide

  50. Resource
    Popup
    UIHelper
    Network
    Auth
    FDS
    Log
    UI
    Component
    ࢚ಿী ೙ਃೠ ӝמ

    View Slide

  51. ݽٕ ܻ࠙о য۰਍ ੉ਬ

    View Slide

  52. ݽٕ ܻ࠙о য۰਍ ੉ਬ
    - ೐۽ં౟, ೐ۨ੐ਕ௼ܳ ࣻز ࢤࢿ ߂ ҙܻ

    View Slide

  53. ݽٕ ܻ࠙о য۰਍ ੉ਬ
    - ೐۽ં౟, ೐ۨ੐ਕ௼ܳ ࣻز ࢤࢿ ߂ ҙܻ

    View Slide

  54. ݽٕ ܻ࠙о য۰਍ ੉ਬ
    - ೐۽ં౟, ೐ۨ੐ਕ௼ܳ ࣻز ࢤࢿ ߂ ҙܻ

    View Slide

  55. ݽٕ ܻ࠙о য۰਍ ੉ਬ
    - ೐۽ં౟, ೐ۨ੐ਕ௼ܳ ࣻز ࢤࢿ ߂ ҙܻ

    View Slide

  56. ݽٕ ܻ࠙о য۰਍ ੉ਬ
    - ೐۽ં౟, ೐ۨ੐ਕ௼ܳ ࣻز ࢤࢿ ߂ ҙܻ
    - গ೒ܻா੉࣌ীࢲ ز੸ ೐ۨ੐ਕ௼ܳ Embed ೞ૑ ঋਵݶ ۠ఋ੐ ী۞ ߊࢤ
    dyld: Library not loaded: @rpath/ModuleB.framework/ModuleB


    Referenced from: /private/var/containers/Bundle/Application/D00C1442-17A1-4D39-9E94-1C4EF18DB688/
    Application.app/Application


    Reason: image not found

    View Slide

  57. ݽٕ ܻ࠙о য۰਍ ੉ਬ
    - ೐۽ં౟, ೐ۨ੐ਕ௼ܳ ࣻز ࢤࢿ ߂ ҙܻ
    - গ೒ܻா੉࣌ীࢲ ز੸ ೐ۨ੐ਕ௼ܳ Embed ೞ૑ ঋਵݶ ۠ఋ੐ ী۞ ߊࢤ
    - ੿੸ ೐ۨ੐ਕ௼/ۄ੉࠳۞ܻ ࢎਊद ௏٘о ઺ࠂ ࠂࢎغח ޙઁ
    Class AFNetworking is implemented in both /private/var/containers/Bundle/Application/
    D00C1442-17A1-4D39-9E94-1C4EF18DB688/Application.app/Frameworks/ModuleA.framework/ModuleA
    (0x10000000) and /private/var/containers/Bundle/Application/D00C1442-17A1-4D39-9E94-1C4EF18DB688/
    Application.app/Frameworks/ModuleB.framework/ModuleB (0x10000000). One of the two will be used.
    Which one is undefined.

    View Slide

  58. - SwiftPM ઁডࢎ೦
    - Con
    fi
    guration਷ Debug, Release ݅ ઁҕ
    - ৈ۞ ജ҃੄ Con
    fi
    guration ࢸ੿਷ য۰਑
    - Develop, Test, Stage, Production ١
    .target(


    name: "FeatureAuth",


    swiftSettings: [


    .define("DEBUG", .when(configuration: .debug)),


    .define("RELEASE", .when(configuration: .release))


    ])
    ݽٕ ܻ࠙о য۰਍ ੉ਬ

    View Slide

  59. - SwiftPM ઁডࢎ೦
    - Con
    fi
    guration਷ Debug, Release ݅ ઁҕ
    - ৈ۞ ജ҃੄ Con
    fi
    guration ࢸ੿਷ য۰਑
    - Develop, Test, Stage, Production ١
    .target(


    name: "FeatureAuth",


    swiftSettings: [


    .define("DEBUG", .when(configuration: .debug)),


    .define("RELEASE", .when(configuration: .release))


    ])
    ݽٕ ܻ࠙о য۰਍ ੉ਬ

    View Slide

  60. - য়೑ࣗझ, ଵҊ੗ܐ ١ ࠗ઒
    ݽٕ ܻ࠙о য۰਍ ੉ਬ

    View Slide

  61. بҳ
    য۰਍ ࠗ࠙ਸ ೧Ѿ೧઴ ࣻ ੓ח بҳо ੓׮ݶ?

    View Slide

  62. ೐۽ં౟ ࢤࢿ بҳ ઑѤ

    View Slide

  63. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - Swift ঱য۽ Manifest ੘ࢿ оמೡ Ѫ
    - ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ੄ Embed ࢸ੿ ߂ ੄ઓࢿ ҙܻ
    - ઑѤী ٮۄ ೐۽ં౟, ਕ௼झಕ੉झ ز੸ ࢤࢿ
    - ੄ઓࢿ Ӓې೐ ࢤࢿ ߂ оदച

    View Slide

  64. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - Swiftܳ ࢎਊೞৈ Manifestܳ ੘ࢿ оמೡ Ѫ
    - Manifest Template ࢎਊ оמ
    let project = Project(name: "Application",


    bundleId: "com.kakaobank.app",


    sources: ["App/Sources/**"],


    resources: ["App/Resources/**"])

    View Slide

  65. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - Swiftܳ ࢎਊೞৈ Manifestܳ ੘ࢿ оמೡ Ѫ
    - Manifest Template ࢎਊ оמ
    let project = Project(name: "Application",


    bundleId: "com.kakaobank.app",


    sources: ["App/Sources/**"],


    resources: ["App/Resources/**"])

    View Slide

  66. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ੄ Embed ࢸ੿ ߂ ੄ઓࢿ ҙܻ
    - ز੸ ೐ۨ੐ਕ௼, ੿੸ ۄ੉࠳۞ܻ ҳ࠙ೞৈ ୊ܻ

    View Slide

  67. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ੄ Embed ࢸ੿ ߂ ੄ઓࢿ ҙܻ

    View Slide

  68. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ੄ Embed ࢸ੿ ߂ ੄ઓࢿ ҙܻ

    View Slide

  69. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ੄ Embed ࢸ੿ ߂ ੄ઓࢿ ҙܻ

    View Slide

  70. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ੄ Embed ࢸ੿ ߂ ੄ઓࢿ ҙܻ

    View Slide

  71. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - ઑѤী ٮۄ ೐۽ં౟, ਕ௼झಕ੉झ ࢤࢿ ઁয
    - ജ҃߸ࣻܳ ੉ਊೞৈ ઑѤޙਵ۽ ࠙ӝ ୊ܻ оמ
    - ౠ੿ ೐۽ં౟ਸ ӝળਵ۽ ਕ௼झಕ੉झ ҳࢿ
    EXCEPT_MODULEB ജ҃߸ࣻо হח ҃਋ EXCEPT_MODULEB ജ҃߸ࣻ ч੉ Yੋ ҃਋

    View Slide

  72. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - ઑѤী ٮۄ ೐۽ં౟, ਕ௼झಕ੉झ ࢤࢿ ઁয
    - ജ҃߸ࣻܳ ੉ਊೞৈ ઑѤޙਵ۽ ࠙ӝ ୊ܻ оמ
    - ౠ੿ ೐۽ં౟ਸ ӝળਵ۽ ਕ௼झಕ੉झ ҳࢿ
    EXCEPT_MODULEB ജ҃߸ࣻо হח ҃਋ EXCEPT_MODULEB ജ҃߸ࣻ ч੉ Yੋ ҃਋

    View Slide

  73. ೐۽ં౟ ࢤࢿ بҳ ઑѤ
    - ݽٕ੄ ੄ઓࢿ Ӓې೐ ࢤࢿ ߂ оदച
    - ੹୓ ੄ઓࢿ Ӓې೐ ഛੋਵ۽ 

    ഛ੢ оמೠ ҳઑܳ ࢸ҅ оמ

    View Slide

  74. Tuist XcodeGen
    Manifest ࢎਊ оמ ঱য Swift YAML
    మ೒݁ ࢎਊ оמ оמ
    ੄ઓࢿ Ӓې೐ ࢤࢿ оמ оמ
    ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ ੄ઓࢿ ҙܻ оמ оמ
    ജ҃߸ࣻ ࢎਊ оמ оמ
    ઑѤী ٮۄ ೐۽ં౟ ز੸ ࢤࢿ оמ ࠛо
    ߡ੹ী ٮۄ о߸੸ੌ ࣻ ੓णפ׮.
    ೐۽ં౟ ࢤࢿ بҳ ઑѤ ࠺Ү

    View Slide

  75. Tuist XcodeGen
    Manifest ࢎਊ оמ ঱য Swift YAML
    మ೒݁ ࢎਊ оמ оמ
    ੄ઓࢿ Ӓې೐ ࢤࢿ оמ оמ
    ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ ੄ઓࢿ ҙܻ оמ оמ
    ജ҃߸ࣻ ࢎਊ оמ оמ
    ઑѤী ٮۄ ೐۽ં౟ ز੸ ࢤࢿ оמ ࠛо
    ߡ੹ী ٮۄ о߸੸ੌ ࣻ ੓णפ׮.
    ೐۽ં౟ ࢤࢿ بҳ ઑѤ ࠺Ү

    View Slide

  76. Tuist XcodeGen
    Manifest ࢎਊ оמ ঱য Swift YAML
    మ೒݁ ࢎਊ оמ оמ
    ੄ઓࢿ Ӓې೐ ࢤࢿ оמ оמ
    ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ ੄ઓࢿ ҙܻ оמ оמ
    ജ҃߸ࣻ ࢎਊ оמ оמ
    ઑѤী ٮۄ ೐۽ં౟ ز੸ ࢤࢿ оמ ࠛо
    ߡ੹ী ٮۄ о߸੸ੌ ࣻ ੓णפ׮.
    ೐۽ં౟ ࢤࢿ بҳ ઑѤ ࠺Ү

    View Slide

  77. Tuistܳ ੉ਊೠ ೐۽ં౟ ҙܻ

    View Slide

  78. App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    ೐۽ં౟ ҙܻ

    View Slide

  79. App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    Linking
    Embed Embed
    ೐۽ં౟ ҙܻ

    View Slide

  80. App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    Linking
    Embed Embed
    ೐۽ં౟ ҙܻ

    View Slide

  81. App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    Linking
    dyld: Library not loaded

    Reason: image not found
    Embed Embed
    ೐۽ં౟ ҙܻ

    View Slide

  82. App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    Linking
    dyld: Library not loaded

    Reason: image not found
    Embed Embed
    ೐۽ં౟ ҙܻ

    View Slide

  83. App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    Linking
    Embed Embed
    Embed
    ೐۽ં౟ ҙܻ

    View Slide

  84. App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    Linking
    Embed Embed
    Embed
    ೐۽ં౟ ҙܻ

    View Slide

  85. let targets: [Target] = [


    Target(


    name: "Application",


    platform: .iOS,


    product: .app,


    bundleId: "com.kakaobank.app",


    sources: ["App/Sources/**"],


    resources: ["App/Resources/**"],


    dependencies: [


    .ModuleA,


    .ModuleB,


    ],


    settings: .settings(configurations: XCConfig.example)


    )


    ]
    ೐۽ં౟ ҙܻ

    View Slide

  86. let targets: [Target] = [


    Target(


    name: "Application",


    platform: .iOS,


    product: .app,


    bundleId: "com.kakaobank.app",


    sources: ["App/Sources/**"],


    resources: ["App/Resources/**"],


    dependencies: [


    .ModuleA,


    .ModuleB,


    ],


    settings: .settings(configurations: XCConfig.example)


    )


    ]
    ೐۽ં౟ ҙܻ

    View Slide

  87. ೐۽ં౟ ҙܻ

    View Slide

  88. ೐۽ં౟ ҙܻ

    View Slide

  89. ೐۽ં౟ ҙܻ

    View Slide

  90. ೐۽ં౟ ҙܻ

    View Slide

  91. ೐۽ં౟ ҙܻ

    View Slide

  92. ೐۽ં౟ ҙܻ

    View Slide

  93. ೐۽ં౟ ҙܻ

    View Slide

  94. App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    Linking
    Embed Embed
    Embed
    ModuleA
    DemoApp
    Embed
    Embed
    ModuleC
    DemoApp
    Embed
    ೐۽ં౟ ҙܻ

    View Slide

  95. let env = ProcessInfo.processInfo.environment


    let isExceptModuleB = (env["TUIST_BANK_EXCEPT_MODULEB"] ?? "") == "Y"


    let targets: [Target] = [


    Target(


    name: "Application",


    platform: .iOS,


    product: .app,


    bundleId: "com.kakaobank.app",


    sources: ["App/Sources/**"],


    resources: ["App/Resources/**"],


    dependencies: [


    [.ModuleA],


    isExceptModuleB


    ? []


    : [.ModuleB]


    ].flatMap { $0 },


    settings: .settings(configurations: XCConfig.example)


    )


    ]
    TUIST۽ द੘ೞח ജ҃߸ࣻ ࢎਊ
    ੌ߈੸ੋ ۽૒୊ۢ ੘ࢿ оמ
    $ export TUIST_BANK_EXCEPT_MODULEB=Y
    $ tuist generate
    ೐۽ં౟ ҙܻ

    View Slide

  96. let env = ProcessInfo.processInfo.environment


    let isExceptModuleB = (env["TUIST_BANK_EXCEPT_MODULEB"] ?? "") == "Y"


    let targets: [Target] = [


    Target(


    name: "Application",


    platform: .iOS,


    product: .app,


    bundleId: "com.kakaobank.app",


    sources: ["App/Sources/**"],


    resources: ["App/Resources/**"],


    dependencies: [


    [.ModuleA],


    isExceptModuleB


    ? []


    : [.ModuleB]


    ].flatMap { $0 },


    settings: .settings(configurations: XCConfig.example)


    )


    ]
    TUIST۽ द੘ೞח ജ҃߸ࣻ ࢎਊ
    ੌ߈੸ੋ ۽૒୊ۢ ੘ࢿ оמ
    $ export TUIST_BANK_EXCEPT_MODULEB=Y
    $ tuist generate
    ೐۽ં౟ ҙܻ

    View Slide

  97. ೐۽ં౟ ҙܻ

    View Slide

  98. ೐۽ં౟ ҙܻ

    View Slide

  99. ೐۽ં౟ ҙܻ

    View Slide

  100. App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    Linking
    Embed Embed
    Embed
    ModuleA
    DemoApp
    Embed
    Embed
    ModuleC
    DemoApp
    Embed
    ೐۽ં౟ ҙܻ

    View Slide

  101. App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    Linking
    Embed Embed
    Embed
    ModuleA
    DemoApp
    Embed
    Embed
    ModuleC
    DemoApp
    Embed
    ೐۽ં౟ ҙܻ

    View Slide

  102. $ tuist generate ModuleADemoApp App
    ModuleA
    Framework
    ModuleB
    Framework
    ModuleC
    Framework
    Linking
    Embed Embed
    Embed
    ModuleA
    DemoApp
    Embed
    Embed
    ModuleC
    DemoApp
    Embed
    ೐۽ં౟ ҙܻ

    View Slide

  103. ೐۽ં౟ ҙܻ

    View Slide

  104. ೐۽ં౟ ҙܻ

    View Slide

  105. ೐۽ં౟ ҙܻ

    View Slide

  106. ModuleA
    Framework
    B
    Framework
    ModuleC
    Framework
    ModuleA
    DemoApp
    App
    ModuleC
    DemoApp
    ೐۽ં౟ ҙܻ

    View Slide

  107. ModuleA
    Framework
    B
    Framework
    ModuleC
    Framework
    ModuleA
    DemoApp
    App
    ModuleC
    DemoApp
    $ tuist graph
    ೐۽ં౟ ҙܻ

    View Slide

  108. View Slide

  109. View Slide

  110. ݽٕ ܻ࠙ द੘೧ࠁӝ

    View Slide

  111. ݽٕ ܻ࠙ द੘ ࣽࢲ
    - ௏٘ ੿ܻ
    - ਬ౰ܻ౭, ֎౟ਕ௼, ࠁউ, ജ҃ࢸ੿, ۽Ӓ, UI ١੄ 

    ಫ؊, ౵ੌ۽ ޘযࢲ ੿ܻ

    View Slide

  112. ݽٕ ܻ࠙ द੘ ࣽࢲ
    - Tuistܳ ഝਊೞৈ ೐۽ં౟ ࢤࢿ
    - ੄ઓࢿ੉ ੸਷ ௏٘ࠗఠ ࢜۽਍ ೐۽ં౟۽ ױ҅߹ ੉੹

    View Slide

  113. ݽٕ ܻ࠙ ੘স

    View Slide

  114. ݽٕ ܻ࠙ ੘স

    View Slide

  115. ݽٕ ܻ࠙ ੘স

    View Slide

  116. ݽٕ ܻ࠙ ੘স

    View Slide

  117. ݽٕ ܻ࠙ ੘স

    View Slide

  118. ݽٕ ܻ࠙ ੘স

    View Slide

  119. ݽٕ ܻ࠙ ੘স

    View Slide

  120. ݽٕ ܻ࠙ ੘স

    View Slide

  121. ݽٕ ܻ࠙ ੘স

    View Slide

  122. ݽٕ ܻ࠙ ੘স

    View Slide

  123. ݽٕ ܻ࠙ ੘স

    View Slide

  124. ݽٕ ܻ࠙ ੘স

    View Slide

  125. ݽٕ ܻ࠙ ੘স

    View Slide

  126. ݽٕ ܻ࠙ ੘স

    View Slide

  127. ݽٕ ܻ࠙ ੘স

    View Slide

  128. ݽٕ ܻ࠙ ੘স

    View Slide

  129. ݽٕ ܻ࠙ ੘স

    View Slide

  130. ݽٕ ܻ࠙ ੘স

    View Slide

  131. ݽٕ ܻ࠙ ੘স

    View Slide

  132. View Slide

  133. ೐۽ં౟ ৈ੿
    ѐߊ ࢤ࢑ࢿ ѐࢶ ߑߨ ঌইࠁӝ
    ஠஠য়ߛ௼ ݽٕ ইఃఫ୊ ࢸ҅

    View Slide

  134. Core
    Core
    Common
    CodeTable
    Error
    Environment
    Security
    E2E
    FDS
    Keychain
    Logger
    Trace
    AppLog
    Firebase
    Utility
    Currency
    Foundation


    Extension
    Network
    APIs
    APIBase

    View Slide

  135. Core
    Core
    Common
    CodeTable
    Error
    Environment
    Security
    E2E
    FDS
    Keychain
    Logger
    Trace
    AppLog
    Firebase
    Utility
    Currency
    Foundation


    Extension
    Network
    APIs
    APIBase

    View Slide

  136. UI
    Keyboard Color
    Resource
    Toast
    Helper
    UIComponent
    RichString
    Indicator
    UI

    View Slide

  137. Features
    ੋૐ

    ੉୓
    ղ नਊ੿ࠁ
    Feature
    ࣻन
    ੑ୹Әా੢
    ੿ӝ৘Ә
    ੿ӝ੸Ә
    ৈन
    ઱ఖ׸ࠁ؀୹
    ੹ਘࣁࠁૐӘ؀୹
    नਊ؀୹
    ஠٘
    ୓௼஠٘
    ޷פ஠٘
    ઁോ
    ೧৻࣠Ә
    ೧৻҅ઝ࣠Ә
    WUࡅܲ೧৻࣠Ә
    Ҋёࣃఠ
    Core UI

    View Slide

  138. Features
    ੋૐ

    ੉୓
    ղ नਊ੿ࠁ
    Feature
    ࣻन
    ੑ୹Әా੢
    ੿ӝ৘Ә
    ੿ӝ੸Ә
    ৈन
    ઱ఖ׸ࠁ؀୹
    ੹ਘࣁࠁૐӘ؀୹
    नਊ؀୹
    ஠٘
    ୓௼஠٘
    ޷פ஠٘
    ઁോ
    ೧৻࣠Ә
    ೧৻҅ઝ࣠Ә
    WUࡅܲ೧৻࣠Ә
    Ҋёࣃఠ
    Core UI

    View Slide

  139. ஠஠য়ߛ௼ ݽٕ ইఃఫ୊ ࢸ҅
    Application
    .
    .
    .
    Features
    ੑ୹Әా੢
    ੿ӝ৘Ә
    ઱ఖ׸ࠁ؀୹
    नਊ؀୹
    ୓௼஠٘ ੋૐ
    ޷פ஠٘ ೧৻࣠Ә
    Core
    Common
    Utility
    FDS
    Network
    Logger
    E2E
    Keyboard
    UIComponent
    Color
    Helper
    Resource
    Indicator
    UI

    View Slide

  140. ஠஠য়ߛ௼ ݽٕ ইఃఫ୊ ࢸ҅
    Core
    Common
    Utility
    FDS
    Network
    Logger
    E2E
    Keyboard
    UIComponent
    Color
    Helper
    Resource
    Indicator
    UI
    DemoApp
    DemoApp
    DemoApp
    DemoApp
    Application
    .
    .
    .
    Features
    ੑ୹Әా੢
    ੿ӝ৘Ә
    ઱ఖ׸ࠁ؀୹
    नਊ؀୹
    ୓௼஠٘ ੋૐ
    ޷פ஠٘ ೧৻࣠Ә

    View Slide

  141. Core
    Common
    Utility
    FDS
    Network
    Logger
    E2E
    ஠஠য়ߛ௼ ݽٕ ইఃఫ୊ ࢸ҅
    DemoApp
    DemoApp
    DemoApp
    DemoApp
    Application
    .
    .
    .
    Features
    ੑ୹Әా੢
    ੿ӝ৘Ә
    ઱ఖ׸ࠁ؀୹
    नਊ؀୹
    ୓௼஠٘ ੋૐ
    ޷פ஠٘ ೧৻࣠Ә
    Keyboard
    UIComponent
    Color
    Helper
    Resource
    Indicator
    UI

    View Slide

  142. Core
    Common
    Utility
    FDS
    Network
    Logger
    E2E
    ஠஠য়ߛ௼ ݽٕ ইఃఫ୊ ࢸ҅
    DemoApp
    DemoApp
    DemoApp
    DemoApp
    Application
    .
    .
    .
    Features
    ੑ୹Әా੢
    ੿ӝ৘Ә
    ઱ఖ׸ࠁ؀୹
    नਊ؀୹
    ୓௼஠٘ ੋૐ
    ޷פ஠٘ ೧৻࣠Ә
    Keyboard
    UIComponent
    Color
    Helper
    Resource
    Indicator
    UI

    View Slide

  143. Core
    Common
    Utility
    FDS
    Network
    Logger
    E2E
    ஠஠য়ߛ௼ ݽٕ ইఃఫ୊ ࢸ҅
    DemoApp
    DemoApp
    DemoApp
    DemoApp
    Application
    .
    .
    .
    Features
    ੑ୹Әా੢
    ੿ӝ৘Ә
    ઱ఖ׸ࠁ؀୹
    नਊ؀୹
    ୓௼஠٘ ੋૐ
    ޷פ஠٘ ೧৻࣠Ә
    Keyboard
    UIComponent
    Color
    Helper
    Resource
    Indicator
    UI

    View Slide

  144. View Slide

  145. View Slide

  146. ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼

    View Slide

  147. - ੹୓ ੄ઓҙ҅ ౵ঈ оמ
    - ௏٘੄ ੄ઓҙ҅ ౵ঈ ߂ ೧׼ ࢿѺী ݏח ݽٕ۽ ੉੹ೞৈ ਽૘ب ֫੐
    ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼

    View Slide

  148. - ੹୓੸ੋ ੄ઓҙ҅ ౵ঈ оמ
    - ૐ࠙ ࠽٘ ഝਊ
    ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼

    View Slide

  149. - ੹୓੸ੋ ੄ઓҙ҅ ౵ঈ оמ
    - ૐ࠙ ࠽٘ ഝਊ
    - Tuist۽ ࢤࢿػ ݽٕ੄ ؘݽজ ഝਊ
    - InjectionIII, Lookin, RevealApp, Xcode Preview ١ UI ѐߊ بҳܳ ഝਊೠ UI ѐߊ
    - ࡅܲ ࠺ૉפझ ۽૒ ѐߊ, प೯ ߂ ഛੋ оמ
    ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼

    View Slide

  150. - ੹୓੸ੋ ੄ઓҙ҅ ౵ঈ оמ
    - ૐ࠙ ࠽٘ ഝਊ
    - Tuist۽ ࢤࢿػ ݽٕ੄ ؘݽজ ഝਊ
    - InjectionIII, Lookin, RevealApp, Xcode Preview ١ UI ѐߊ بҳܳ ഝਊೠ UI ѐߊ
    - ࡅܲ ࠺ૉפझ ۽૒ ѐߊ, प೯ ߂ ഛੋ оמ
    ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼

    View Slide

  151. - ੹୓੸ੋ ੄ઓҙ҅ ౵ঈ оמ
    - ૐ࠙ ࠽٘ ഝਊ
    - Tuist۽ ࢤࢿػ ݽٕ੄ ؘݽজ ഝਊ
    - ࡈۄ૓ పझ౟ ࢎ੉௿
    ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼

    View Slide

  152. - ੹୓੸ੋ ੄ઓҙ҅ ౵ঈ оמ
    - ࡅܲ ૐ࠙ ࠽٘ ഝਊ
    - ௏٘ীࢲ ݽٕ۽ ҙ੼ ߸҃
    - উ੿੸ੋ ݽٕ ҳ୷
    - ݽٕ ࢎਊद ৘࢚ оמೠ ز੘
    - ࢜۽਍ ࢚ಿҗ ӝמਸ ࡅܰҊ औѱ ੘ࢿ
    - ೐۽ં౟о উ੿੸ੋ ҳઑ۽ ѐࢶ
    ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼

    View Slide

  153. - ੹୓੸ੋ ੄ઓҙ҅ ౵ঈ оמ
    - ࡅܲ ૐ࠙ ࠽٘ ഝਊ
    - ௏٘ীࢲ ݽٕ۽ ҙ੼ ߸҃
    - উ੿੸ੋ ݽٕ ҳ୷
    - ݽٕ ࢎਊद ৘࢚ оמೠ ز੘
    - ࢜۽਍ ࢚ಿҗ ӝמਸ ࡅܰҊ औѱ ੘ࢿ
    - ೐۽ં౟о উ੿੸ੋ ҳઑ۽ ѐࢶ
    ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼

    View Slide

  154. খਵ۽ ೧ঠ ೡ Ѫ

    View Slide

  155. - ইఃఫ୊ ࢸ҅ ޙࢲ
    - ݽٕ੄ ࣁ࠙ച
    - ݽٕ੄ ޙࢲച
    - ؘݽ গ೒ܻா੉࣌੄ ૑ࣘ੸ੋ ҙܻ
    খਵ۽ ೧ঠ ೡ Ѫ

    View Slide

  156. - ইఃఫ୊ ࢸ҅ ޙࢲ
    - ݽٕ੄ ࣁ࠙ച
    - ݽٕ੄ ޙࢲച
    - ؘݽ গ೒ܻா੉࣌੄ ૑ࣘ੸ੋ ҙܻ
    খਵ۽ ೧ঠ ೡ Ѫ

    View Slide

  157. - ইఃఫ୊ ࢸ҅ ޙࢲ
    - ݽٕ੄ ࣁ࠙ച
    - ݽٕ੄ ޙࢲച
    - ؘݽ গ೒ܻா੉࣌੄ ૑ࣘ੸ੋ ҙܻ
    খਵ۽ ೧ঠ ೡ Ѫ

    View Slide

  158. - ইఃఫ୊ ࢸ҅ ޙࢲ
    - ݽٕ੄ ࣁ࠙ച
    - ݽٕ੄ ޙࢲച
    - ؘݽ গ೒ܻா੉࣌੄ ૑ࣘ੸ੋ ҙܻ
    খਵ۽ ೧ঠ ೡ Ѫ

    View Slide

  159. - ইఃఫ୊ ࢸ҅ ޙࢲ
    - ݽٕ੄ ࣁ࠙ച
    - ݽٕ੄ ޙࢲച
    - ؘݽ গ೒ܻா੉࣌੄ ૑ࣘ੸ੋ ҙܻ
    খਵ۽ ೧ঠ ೡ Ѫ

    View Slide

  160. - ইఃఫ୊ ࢸ҅ ޙࢲ
    - ݽٕ੄ ࣁ࠙ച
    - ݽٕ੄ ޙࢲച
    - ؘݽ গ೒ܻா੉࣌੄ ૑ࣘ੸ੋ ҙܻ
    খਵ۽ ೧ঠ ೡ Ѫ

    View Slide

  161. - ইఃఫ୊ ࢸ҅ ޙࢲ
    - ݽٕ੄ ࣁ࠙ച
    - ݽٕ੄ ޙࢲച
    - ؘݽ গ೒ܻா੉࣌੄ ૑ࣘ੸ੋ ҙܻ
    খਵ۽ ೧ঠ ೡ Ѫ

    View Slide

  162. - ইఃఫ୊ ࢸ҅ ޙࢲ
    - ݽٕ੄ ࣁ࠙ച
    - ݽٕ੄ ޙࢲച
    - ؘݽ গ೒ܻா੉࣌੄ ૑ࣘ੸ੋ ҙܻ
    খਵ۽ ೧ঠ ೡ Ѫ

    View Slide

  163. ݃஖ݴ

    View Slide

  164. ݃஖ݴ

    View Slide

  165. ݃஖ݴ

    View Slide