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ܳ ഝਊೠ ݽٕ ইఃఫ୊ ࢸ҅ ࢎ۹
  2. ߊ಴ܳ ా೧ ӝ؀ೞח Ѫ • ஠஠য়ߛ௼ iOS ೐۽ં౟੄ ૓೯ ղਊ

    ҕਬ • അ੤ ੘স઺ੋ ݽٕ ইఃఫ୊ ࢸ҅ ҕਬ
  3. ೐۽ં౟ ৈ੿ ѐߊ ࢤ࢑ࢿ ѐࢶ ߑߨ ঌইࠁӝ ஠஠য়ߛ௼ ݽٕ ইఃఫ୊

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

    ࢸ҅
  5. ೐۽ં౟ ৈ੿

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

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

    - ױ੼ - ࠺؀೧૑ח ViewModel ҳઑ - ੿ഋചغ૑ ঋ਷ Routing ইఃఫ୊
  8. ইఃఫ୊ - ੢੼ - ݺഛೠ మ೒݁ - ೐۽ష௒ ૑ೱ ೐۽Ӓې߁

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

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

    оמ - ਽૘ب ֫਷ ௏٘ - Routing ӝמ - ױ੼ - ݆਷ ౵ੌ ࢤࢿ RIBs যࢲয়ࣁਃ RIBsੑפ׮. ஠஠য়ಕ੉ ࠺ૉפझজ ѐߊӝ if(kakao)2020
  11. 16֙ 700ѐ ౵ੌ 6݅઴ 17֙ 1,600ѐ ౵ੌ 23݅઴ 18֙ 2,400ѐ

    ౵ੌ 34݅઴ 4,700ѐ ౵ੌ 56݅઴ 19֙ 16~20֙ 12.31 ӝળ MVVM RIBs ೐۽ં౟ ӏݽ
  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 ೐۽ં౟ ӏݽ
  13. 11,000ѐ ౵ੌ 104݅઴ 2022.08.31 ӝળ

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

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

    ࠽٘ पಁ
  16. ೐۽ં౟ ӏݽ ૐо ѐߊ੗ ࣻ ૐо ѐߊदр ૐо ࢜۽਍ ࢚ಿ

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

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

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

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

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

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

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

    ѐߊ ೐۽ં౟ ਬ૑ࠁࣻ ܻࣗझ ࠗ઒ ௏٘ ૐо Ѿ೤ب ૐо ਬ૑ࠁࣻ ࠺ਊ ૐо Ӕޖदр ૐо పझ౟ ੘ࢿ য۰਑ ѐߊ ৮ܐ ࠽٘ दр ૐо ೐۽ં౟ ӏݽ
  24. ݽٕച ݽٕ۽ ѐߊೡ ࣻ ੓׮ݶ ೧Ѿೡ ࣻ ੓૑ ঋਸө?

  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 ӝળ ೐۽ં౟ ӏݽ
  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 ӝળ ೐۽ં౟ ӏݽ
  27. None
  28. None
  29. بҳ ࢎਊ మ೒݁ ࠂ੟ೠ ࢸ੿ ҙܻ ೐۽ં౟ ࢤࢿ ߂ ӏѺച

  30. ݽٕ 110ѐ 2022.08.31 ӝળ

  31. ݽٕ 110ѐ 2022.08.31 ӝળ

  32. ݽٕ 110ѐ 2022.08.31 ӝળ

  33. ೐۽ં౟ ӏݽ ૐо ѐߊ੗ ࣻ ૐо ݽٕ ࣻ ૐо ࢜۽਍

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

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

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

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

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

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

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

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

    ࢚ಿ ѐߊ ೐۽ં౟ ਬ૑ࠁࣻ ܻࣗझ ࠗ઒ ѐߊ ৮ܐ ௏٘ ૐо ݽٕ ѐߊ ࡅܲ ૐ࠙࠽٘ ࡅܲ ௏٘ प೯ ؘݽজ ӝ߈ ѐߊ ࡅܲ పझ౟ ੘ࢿ উ੿੸ੋ ࢚ಿ ѐߊ ೐۽ં౟ ӏݽ
  42. ݽٕ ઑ݀ উ੿੸ੋ ӝמ, ࢚ಿ ѐߊ ࡅܲ ࠽٘ UI, ࠺ૉפझ

    ۽૒ ѐߊ ߂ प೯
  43. Full Incremental Full Incremental Full Incremental 650s 250s 50s 3s

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

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

    ࢸ҅
  46. ࢚ಿী ೙ਃೠ ӝמ

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

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

  49. UI Business UI Component Resource Popup UIHelper Network Auth FDS

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

    ೙ਃೠ ӝמ
  51. ݽٕ ܻ࠙о য۰਍ ੉ਬ

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

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

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

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

    ҙܻ
  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
  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.
  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)) ]) ݽٕ ܻ࠙о য۰਍ ੉ਬ
  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)) ]) ݽٕ ܻ࠙о য۰਍ ੉ਬ
  60. - য়೑ࣗझ, ଵҊ੗ܐ ١ ࠗ઒ ݽٕ ܻ࠙о য۰਍ ੉ਬ

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

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

  63. ೐۽ં౟ ࢤࢿ بҳ ઑѤ - Swift ঱য۽ Manifest ੘ࢿ оמೡ

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

    Ѫ - Manifest Template ࢎਊ оמ let project = Project(name: "Application", bundleId: "com.kakaobank.app", sources: ["App/Sources/**"], resources: ["App/Resources/**"])
  65. ೐۽ં౟ ࢤࢿ بҳ ઑѤ - Swiftܳ ࢎਊೞৈ Manifestܳ ੘ࢿ оמೡ

    Ѫ - Manifest Template ࢎਊ оמ let project = Project(name: "Application", bundleId: "com.kakaobank.app", sources: ["App/Sources/**"], resources: ["App/Resources/**"])
  66. ೐۽ં౟ ࢤࢿ بҳ ઑѤ - ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ੄ Embed ࢸ੿ ߂

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

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

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

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

    ੄ઓࢿ ҙܻ
  71. ೐۽ં౟ ࢤࢿ بҳ ઑѤ - ઑѤী ٮۄ ೐۽ં౟, ਕ௼झಕ੉झ ࢤࢿ

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

    ઁয - ജ҃߸ࣻܳ ੉ਊೞৈ ઑѤޙਵ۽ ࠙ӝ ୊ܻ оמ - ౠ੿ ೐۽ં౟ਸ ӝળਵ۽ ਕ௼झಕ੉झ ҳࢿ EXCEPT_MODULEB ജ҃߸ࣻо হח ҃਋ EXCEPT_MODULEB ജ҃߸ࣻ ч੉ Yੋ ҃਋
  73. ೐۽ં౟ ࢤࢿ بҳ ઑѤ - ݽٕ੄ ੄ઓࢿ Ӓې೐ ࢤࢿ ߂

    оदച - ੹୓ ੄ઓࢿ Ӓې೐ ഛੋਵ۽ 
 ഛ੢ оמೠ ҳઑܳ ࢸ҅ оמ
  74. Tuist XcodeGen Manifest ࢎਊ оמ ঱য Swift YAML మ೒݁ ࢎਊ

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

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

    оמ оמ ੄ઓࢿ Ӓې೐ ࢤࢿ оמ оמ ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ ੄ઓࢿ ҙܻ оמ оמ ജ҃߸ࣻ ࢎਊ оמ оמ ઑѤী ٮۄ ೐۽ં౟ ز੸ ࢤࢿ оמ ࠛо ߡ੹ী ٮۄ о߸੸ੌ ࣻ ੓णפ׮. ೐۽ં౟ ࢤࢿ بҳ ઑѤ ࠺Ү
  77. Tuistܳ ੉ਊೠ ೐۽ં౟ ҙܻ

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

  79. App ModuleA Framework ModuleB Framework ModuleC Framework Linking Embed Embed

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

    ೐۽ં౟ ҙܻ
  81. App ModuleA Framework ModuleB Framework ModuleC Framework Linking dyld: Library

    not loaded
 Reason: image not found Embed Embed ೐۽ં౟ ҙܻ
  82. App ModuleA Framework ModuleB Framework ModuleC Framework Linking dyld: Library

    not loaded
 Reason: image not found Embed Embed ೐۽ં౟ ҙܻ
  83. App ModuleA Framework ModuleB Framework ModuleC Framework Linking Embed Embed

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

    Embed ೐۽ં౟ ҙܻ
  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) ) ] ೐۽ં౟ ҙܻ
  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) ) ] ೐۽ં౟ ҙܻ
  87. ೐۽ં౟ ҙܻ

  88. ೐۽ં౟ ҙܻ

  89. ೐۽ં౟ ҙܻ

  90. ೐۽ં౟ ҙܻ

  91. ೐۽ં౟ ҙܻ

  92. ೐۽ં౟ ҙܻ

  93. ೐۽ં౟ ҙܻ

  94. App ModuleA Framework ModuleB Framework ModuleC Framework Linking Embed Embed

    Embed ModuleA DemoApp Embed Embed ModuleC DemoApp Embed ೐۽ં౟ ҙܻ
  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 ೐۽ં౟ ҙܻ
  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 ೐۽ં౟ ҙܻ
  97. ೐۽ં౟ ҙܻ

  98. ೐۽ં౟ ҙܻ

  99. ೐۽ં౟ ҙܻ

  100. App ModuleA Framework ModuleB Framework ModuleC Framework Linking Embed Embed

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

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

    Framework Linking Embed Embed Embed ModuleA DemoApp Embed Embed ModuleC DemoApp Embed ೐۽ં౟ ҙܻ
  103. ೐۽ં౟ ҙܻ

  104. ೐۽ં౟ ҙܻ

  105. ೐۽ં౟ ҙܻ

  106. ModuleA Framework B Framework ModuleC Framework ModuleA DemoApp App ModuleC

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

    DemoApp $ tuist graph ೐۽ં౟ ҙܻ
  108. None
  109. None
  110. ݽٕ ܻ࠙ द੘೧ࠁӝ

  111. ݽٕ ܻ࠙ द੘ ࣽࢲ - ௏٘ ੿ܻ - ਬ౰ܻ౭, ֎౟ਕ௼,

    ࠁউ, ജ҃ࢸ੿, ۽Ӓ, UI ١੄ 
 ಫ؊, ౵ੌ۽ ޘযࢲ ੿ܻ
  112. ݽٕ ܻ࠙ द੘ ࣽࢲ - Tuistܳ ഝਊೞৈ ೐۽ં౟ ࢤࢿ -

    ੄ઓࢿ੉ ੸਷ ௏٘ࠗఠ ࢜۽਍ ೐۽ં౟۽ ױ҅߹ ੉੹
  113. ݽٕ ܻ࠙ ੘স

  114. ݽٕ ܻ࠙ ੘স

  115. ݽٕ ܻ࠙ ੘স

  116. ݽٕ ܻ࠙ ੘স

  117. ݽٕ ܻ࠙ ੘স

  118. ݽٕ ܻ࠙ ੘স

  119. ݽٕ ܻ࠙ ੘স

  120. ݽٕ ܻ࠙ ੘স

  121. ݽٕ ܻ࠙ ੘স

  122. ݽٕ ܻ࠙ ੘স

  123. ݽٕ ܻ࠙ ੘স

  124. ݽٕ ܻ࠙ ੘স

  125. ݽٕ ܻ࠙ ੘স

  126. ݽٕ ܻ࠙ ੘স

  127. ݽٕ ܻ࠙ ੘স

  128. ݽٕ ܻ࠙ ੘স

  129. ݽٕ ܻ࠙ ੘স

  130. ݽٕ ܻ࠙ ੘স

  131. ݽٕ ܻ࠙ ੘স

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

    ࢸ҅
  134. Core Core Common CodeTable Error Environment Security E2E FDS Keychain

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

    Logger Trace AppLog Firebase Utility Currency Foundation Extension Network APIs APIBase
  136. UI Keyboard Color Resource Toast Helper UIComponent RichString Indicator UI

  137. Features ੋૐ ക ੉୓ ղ नਊ੿ࠁ Feature ࣻन ੑ୹Әా੢ ੿ӝ৘Ә

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

    ੿ӝ੸Ә ৈन ઱ఖ׸ࠁ؀୹ ੹ਘࣁࠁૐӘ؀୹ नਊ؀୹ ஠٘ ୓௼஠٘ ޷פ஠٘ ઁോ ೧৻࣠Ә ೧৻҅ઝ࣠Ә WUࡅܲ೧৻࣠Ә Ҋёࣃఠ Core UI
  139. ஠஠য়ߛ௼ ݽٕ ইఃఫ୊ ࢸ҅ Application . . . Features ੑ୹Әా੢

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

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

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

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

    ࢸ҅ DemoApp DemoApp DemoApp DemoApp Application . . . Features ੑ୹Әా੢ ੿ӝ৘Ә ઱ఖ׸ࠁ؀୹ नਊ؀୹ ୓௼஠٘ ੋૐ ޷פ஠٘ ೧৻࣠Ә Keyboard UIComponent Color Helper Resource Indicator UI
  144. None
  145. None
  146. ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼

  147. - ੹୓ ੄ઓҙ҅ ౵ঈ оמ - ௏٘੄ ੄ઓҙ҅ ౵ঈ ߂

    ೧׼ ࢿѺী ݏח ݽٕ۽ ੉੹ೞৈ ਽૘ب ֫੐ ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼
  148. - ੹୓੸ੋ ੄ઓҙ҅ ౵ঈ оמ - ૐ࠙ ࠽٘ ഝਊ ݽٕ

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

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

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

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

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

    - ௏٘ীࢲ ݽٕ۽ ҙ੼ ߸҃ - উ੿੸ੋ ݽٕ ҳ୷ - ݽٕ ࢎਊद ৘࢚ оמೠ ز੘ - ࢜۽਍ ࢚ಿҗ ӝמਸ ࡅܰҊ औѱ ੘ࢿ - ೐۽ં౟о উ੿੸ੋ ҳઑ۽ ѐࢶ ݽٕ ইఃఫ୊ ࢸ҅۽ ঳਷ ੉੼
  154. খਵ۽ ೧ঠ ೡ Ѫ

  155. - ইఃఫ୊ ࢸ҅ ޙࢲ - ݽٕ੄ ࣁ࠙ച - ݽٕ੄ ޙࢲച

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

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

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

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

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

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

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

    - ؘݽ গ೒ܻா੉࣌੄ ૑ࣘ੸ੋ ҙܻ খਵ۽ ೧ঠ ೡ Ѫ
  163. ݃஖ݴ

  164. ݃஖ݴ

  165. ݃஖ݴ