based on https://github.com/baekteun/Tuist_Modular_Template
Features - Services - Core - UserInterface - Shared 5개의 레이어를 가집니다.
- Feature
- 사용자의 액션을 처리하거나 데이터를 보여주는, 사용자와 직접 맞닿는 레이어
- ex) AuthFeature, ProfileFeature
- Domain
- 도메인 로직이 진행되는 레이어
- ex) AuthDomain, ProfileDomain
- Core
- 앱의 비즈니스를 포함하지 않고 순수 기능성 모듈이 위치한 레이어
- ex) NetworkingModule, DatabaseModule
- UserInterface
- 공용 View, 디자인 시스템, 리소스 등 UI 요소 모듈이 위치한 레이어
- ex) DesignSystem, LocalizableManager
- Shared
- 로깅, extension 등 모든 레이어에서 공용으로 재사용될 모듈이 위치한 레이어
- ex) UtilityModule, LoggingModule
각 모듈은 Micro Feature 구조를 기반으로 설계됩니다. 확장 가능하고 커지는 프로젝트를 기능별로 수평 확장이 가능하도록 Micro Service에서 영감을 얻은 아키텍쳐입니다.
프로젝트 루트에서 make init
를 실행하여, 프로젝트 이름과 organization 이름을 입력하여 기본 설정을 할 수 있습니다.
프로젝트 루트에서 make signing
를 실행하면 프로젝트 Team Signing을 할 수 있습니다.
프로젝트 루트에서 make module
를 실행하면 모듈 레이어, 이름, Micro Feature 종류를 선택하여 새 모듈을 생성합니다.
프로젝트 루트에서 실행할 수 있는 명령어입니다.
-
make init :
프로젝트 이름과 organization을 입력하여 프로젝트 기본 세팅
- swift Scripts/InitEnvironment.swift
-
make signing :
프로젝트 Team Signing
- swift Scripts/CodeSigning.swift
-
make generate :
외부 디펜던시 fetch 및 프로젝트 generate
- tuist fetch
- tuist generate
-
make module :
모듈 생성
- swift Scripts/GenerateModule.swift
-
make dependency :
디펜던시 추가
- swift Scripts/NewDependency.swift
-
make ci_generate :
디펜던시 fetch 및 CI용 프로젝트 generate (SwiftLint X)
- tuist fetch
- TUIST_ENV=CI tuist generate
-
make cd_generate :
디펜던시 fetch 및 CI용 프로젝트 generate (SwiftLint X)
- tuist fetch
- TUIST_ENV=CD tuist generate
-
make clean :
전체 xcodeproj, xcworkspace 파일 삭제
- rm -rf **/*.xcodeproj
- rm -rf *.xcworkspace
-
make reset :
tuist clean 후, 전체 xcodeproj, xcworkspace 파일 삭제
- tuist clean
- rm -rf **/*.xcodeproj
- rm -rf *.xcworkspace
tuist Scaffold(Demo/Interface/Sources/Testing/Tests/UITests)
--layer (Features/Services/Core/Shared/UserInterface 레이어 이름)
--name (모듈 이름)
으로 Project 모듈의 Target 모듈을 직접 생성 가능합니다.
처음엔 make init으로 프로젝트 이름과 organization을 생성한다. 기본적으로 각 레이어에 하나씩 디폴트로 들어가있다.
- Feature
- BaseFeature
- Domain
- BaseDomain
- Core
- Networking
- UserInterface
- DesignSystem
- Shared
- GlobalThirdPartyLibrary
모듈 생성 시 make module 명령어로 해당 모듈이 가질 모듈을 전부 생성.
만약 잘못 생성했다면, Plugin/DependencyPlugin/ProjectDescriptionHelpers/ModulePaths
로 가서 해당 case를 지워주고, Projects
폴더 하위에 생성된 폴더를 삭제해야 한다.
만든 모듈을 연결하려면 Projects
폴더 하위에 Project.swift
파일에 dependencies 배열 안에 넣어주어야 한다.