-
Notifications
You must be signed in to change notification settings - Fork 0
Module Structure
JEONG edited this page Jun 29, 2026
·
2 revisions
Tuist 기반
UMCApp/모듈 구조와 의존성 방향. 빌드 명령은 Build & Run 참고.
| 축 | 형태 | 상태 |
|---|---|---|
UMCApp/ |
Tuist | 활성 — 모든 신규·유지보수 작업 대상 |
AppProduct/ |
xcodeproj | 레거시, v2.2.0 동결 (열람/참고 전용) |
UMCApp/
├── Makefile # 빌드/생성 래퍼 (mise exec 기반)
├── MAKEFILE_GUIDE.md # 팀원용 사용 가이드
├── mise.toml # tuist 버전 고정 (4.155.0)
├── Project.swift # 앱 타겟 정의
├── Workspace.swift # 전체 워크스페이스 (Core/*, Features/* glob + Widget/Watch)
├── Tuist.swift # Tuist 시스템 설정
├── Tuist/
│ ├── Package.swift # SPM 외부 의존성 (Moya, Kingfisher)
│ └── ProjectDescriptionHelpers/
│ ├── Project+Core.swift # Core 모듈 공통 헬퍼
│ └── Project+Feature.swift # Feature 모듈 공통 헬퍼
├── Core/ # 8개 공유 인프라 모듈
│ ├── Foundation/ # 기반 유틸리티, Config
│ ├── Network/ # 네트워크 레이어 (Moya)
│ ├── DesignSystem/ # 디자인 토큰, 색상
│ ├── UIComponents/ # 공용 UI 컴포넌트 (Kingfisher)
│ ├── DI/ # 의존성 주입 컨테이너
│ ├── NearbyExchange/ # 근거리 명함 교환 인프라
│ ├── WatchConnectivity/ # iOS ↔ watchOS 통신
│ └── WidgetShared/ # Widget-App 공유 모델
├── Features/ # 8개 기능 모듈
│ ├── Activity/
│ ├── Auth/
│ ├── Badge/
│ ├── BusinessCard/ # 전자명함 (3D 렌더링 캡슐화 경계 모듈)
│ ├── Community/
│ ├── Home/
│ ├── MyPage/
│ └── Notice/
├── UMCAppWidget/ # Widget Extension 타겟
└── UMCWatchApp/ # watchOS Companion App 타겟
App Target (UMCApp)
↓
Feature Presentation (Domain + CoreDesignSystem + CoreUIComponents)
↓
Feature Domain (UMCFoundation)
Feature Data (Domain + CoreNetwork + UMCFoundation)
↓
Core Modules (Foundation / Network / DesignSystem / UIComponents / DI)
↓
External Packages (Moya 15.0.3 / Kingfisher 8.6.1)
경계 정책 — BusinessCard:
Model3D/RealityView등 RealityKit 렌더링은BusinessCardPresentation내부에만 캡슐화한다. 명함을 노출하는 다른 Feature는BusinessCardPresentation만 링크하며 RealityKit을 직접 링크하지 않는다.
각 Feature는 Clean Architecture에 따라 3개 타겟으로 분리됩니다.
| 타겟 | Product Type | Bundle ID 패턴 | Sources |
|---|---|---|---|
{Name}Domain |
.staticFramework |
dev.umc.feature.{name}.domain |
Domain/Sources/** |
{Name}Data |
.staticFramework |
dev.umc.feature.{name}.data |
Data/Sources/** |
{Name}Presentation |
.staticFramework |
dev.umc.feature.{name}.presentation |
Presentation/Sources/** |
보일러플레이트 제거를 위한 헬퍼 함수:
// Core 모듈 생성
coreProject(
name: "CoreNetwork",
bundleIdSuffix: "network",
dependencies: [.target(name: "UMCFoundation"), .external(name: "Moya")]
)
// Feature 모듈 생성 (3개 타겟 자동 생성)
featureProject(
name: "Auth",
domainExtraDependencies: [],
dataExtraDependencies: [],
presentationExtraDependencies: []
)| 항목 | 값 |
|---|---|
| Tuist 버전 |
UMCApp/mise.toml 고정 (4.155.0) |
| Deployment Target | iOS 26.3 (전체 타겟 공통) |
| Product Type | 모든 모듈 .staticFramework
|
| Bundle ID | Core → dev.umc.core.* / Feature → dev.umc.feature.*.*
|
| 외부 의존성 | Moya 15.0.3 (CoreNetwork) / Kingfisher 8.6.1 (CoreUIComponents) |
Tuist 버전을 올릴 때는
mise.toml만 수정하고 PR 본문에 릴리스 노트를 첨부합니다. Makefile / 로컬 tuist 설치는 손대지 않습니다.
AppProduct/AppProduct/
├── Core/ # Alert, Common(DesignSystem/Enum/Error/UIComponents), DIContainer, Manager, Navigation, NetworkAdapter, Secret
├── Utilities/ # Extensions, Keychain, Modifier, RemoteImage, Shadow, ToolBar
└── Features/ # Activity, Auth, Community, Home, MyPage, Notice, Splash, Tab
AppProduct는
v2.2.0에 동결되어 있습니다. 수정하지 않습니다.
관련 문서: Build & Run · Architecture