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

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

kakao
December 08, 2022

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

#iOS #생산성

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

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

kakao

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. MVVM - ੢੼ - ؘ੉ఠ ߄ੋ٬ਵ۽ UI৬ Model р੄ زӝച

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

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

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

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

    ౵ੌ 34݅઴ 4,700ѐ ౵ੌ 56݅઴ 19֙ 16~20֙ 12.31 ӝળ MVVM RIBs ೐۽ં౟ ӏݽ
  8. 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 ೐۽ં౟ ӏݽ
  9. ೐۽ં౟ ӏݽ ૐо ѐߊ੗ ࣻ ૐо ѐߊदр ૐо ࢜۽਍ ࢚ಿ

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

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

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

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

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

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

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

    ѐߊ ೐۽ં౟ ਬ૑ࠁࣻ ܻࣗझ ࠗ઒ ௏٘ ૐо Ѿ೤ب ૐо ਬ૑ࠁࣻ ࠺ਊ ૐо Ӕޖदр ૐо పझ౟ ੘ࢿ য۰਑ ѐߊ ৮ܐ ࠽٘ दр ૐо ೐۽ં౟ ӏݽ
  17. 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 ӝળ ೐۽ં౟ ӏݽ
  18. 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 ӝળ ೐۽ં౟ ӏݽ
  19. ೐۽ં౟ ӏݽ ૐо ѐߊ੗ ࣻ ૐо ݽٕ ࣻ ૐо ࢜۽਍

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

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

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

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

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

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

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

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

    ࢚ಿ ѐߊ ೐۽ં౟ ਬ૑ࠁࣻ ܻࣗझ ࠗ઒ ѐߊ ৮ܐ ௏٘ ૐо ݽٕ ѐߊ ࡅܲ ૐ࠙࠽٘ ࡅܲ ௏٘ प೯ ؘݽজ ӝ߈ ѐߊ ࡅܲ పझ౟ ੘ࢿ উ੿੸ੋ ࢚ಿ ѐߊ ೐۽ં౟ ӏݽ
  28. ݽٕ ܻ࠙о য۰਍ ੉ਬ - ೐۽ં౟, ೐ۨ੐ਕ௼ܳ ࣻز ࢤࢿ ߂

    ҙܻ - গ೒ܻா੉࣌ীࢲ ز੸ ೐ۨ੐ਕ௼ܳ 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
  29. ݽٕ ܻ࠙о য۰਍ ੉ਬ - ೐۽ં౟, ೐ۨ੐ਕ௼ܳ ࣻز ࢤࢿ ߂

    ҙܻ - গ೒ܻா੉࣌ীࢲ ز੸ ೐ۨ੐ਕ௼ܳ 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.
  30. - 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)) ]) ݽٕ ܻ࠙о য۰਍ ੉ਬ
  31. - 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)) ]) ݽٕ ܻ࠙о য۰਍ ੉ਬ
  32. ೐۽ં౟ ࢤࢿ بҳ ઑѤ - Swift ঱য۽ Manifest ੘ࢿ оמೡ

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

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

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

    ੄ઓࢿ ҙܻ - ز੸ ೐ۨ੐ਕ௼, ੿੸ ۄ੉࠳۞ܻ ҳ࠙ೞৈ ୊ܻ
  36. ೐۽ં౟ ࢤࢿ بҳ ઑѤ - ઑѤী ٮۄ ೐۽ં౟, ਕ௼झಕ੉झ ࢤࢿ

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

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

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

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

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

    оמ оמ ੄ઓࢿ Ӓې೐ ࢤࢿ оמ оמ ೐ۨ੐ਕ௼, ۄ੉࠳۞ܻ ੄ઓࢿ ҙܻ оמ оמ ജ҃߸ࣻ ࢎਊ оמ оמ ઑѤী ٮۄ ೐۽ં౟ ز੸ ࢤࢿ оמ ࠛо ߡ੹ী ٮۄ о߸੸ੌ ࣻ ੓णפ׮. ೐۽ં౟ ࢤࢿ بҳ ઑѤ ࠺Ү
  42. App ModuleA Framework ModuleB Framework ModuleC Framework Linking dyld: Library

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

    not loaded
 Reason: image not found Embed Embed ೐۽ં౟ ҙܻ
  44. 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) ) ] ೐۽ં౟ ҙܻ
  45. 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) ) ] ೐۽ં౟ ҙܻ
  46. App ModuleA Framework ModuleB Framework ModuleC Framework Linking Embed Embed

    Embed ModuleA DemoApp Embed Embed ModuleC DemoApp Embed ೐۽ં౟ ҙܻ
  47. 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 ೐۽ં౟ ҙܻ
  48. 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 ೐۽ં౟ ҙܻ
  49. App ModuleA Framework ModuleB Framework ModuleC Framework Linking Embed Embed

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

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

    Framework Linking Embed Embed Embed ModuleA DemoApp Embed Embed ModuleC DemoApp Embed ೐۽ં౟ ҙܻ
  52. ݽٕ ܻ࠙ द੘ ࣽࢲ - ௏٘ ੿ܻ - ਬ౰ܻ౭, ֎౟ਕ௼,

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

    ੄ઓࢿ੉ ੸਷ ௏٘ࠗఠ ࢜۽਍ ೐۽ં౟۽ ױ҅߹ ੉੹
  54. Core Core Common CodeTable Error Environment Security E2E FDS Keychain

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

    Logger Trace AppLog Firebase Utility Currency Foundation Extension Network APIs APIBase
  56. Features ੋૐ ക ੉୓ ղ नਊ੿ࠁ Feature ࣻन ੑ୹Әా੢ ੿ӝ৘Ә

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

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

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

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

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

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

    ࢸ҅ DemoApp DemoApp DemoApp DemoApp Application . . . Features ੑ୹Әా੢ ੿ӝ৘Ә ઱ఖ׸ࠁ؀୹ नਊ؀୹ ୓௼஠٘ ੋૐ ޷פ஠٘ ೧৻࣠Ә Keyboard UIComponent Color Helper Resource Indicator UI
  63. - ੹୓ ੄ઓҙ҅ ౵ঈ оמ - ௏٘੄ ੄ઓҙ҅ ౵ঈ ߂

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

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

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

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

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

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

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

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

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

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

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

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

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

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