μ°μ±
κΈ°λ‘μ λ¨κΈ°κ³ 곡μ νλ iOS μ±μ
λλ€.
μ΄ νλ‘μ νΈλ Tuist κΈ°λ° λͺ¨λ μν€ν
μ²μ SwiftUI + TCAλ‘ κ΅¬μ±λμ΄ μμ΅λλ€.
μλ ꡬ쑰λ νμ¬ μ μ₯μμ Project.swift κΈ°μ€ μ€μ νμ± λͺ¨λμ λ°μν©λλ€.
GoForAWalk
βββ Projects
β βββ App
β βββ Feature
β β βββ SplashFeature
β β βββ SignIn
β β βββ MainFeature
β β βββ FeedFeature
β β βββ HistoryFeature
β β βββ ProfileFeature
β β βββ RecordFeature
β β βββ SettingsFeature
β βββ Domain
β β βββ AuthService
β β βββ CameraService
β β βββ FeedService
β β βββ UserService
β βββ Core
β β βββ Networking
β β βββ KeyChainStore
β β βββ Camera
β βββ Shared
β β βββ DependencyInjection
β β βββ GlobalThirdPartyLibrary
β β βββ Util
β βββ UserInterface
β βββ DesignSystem
βββ Plugin
βββ Tuist
βββ Scripts
βββ XCConfig
βββ Package.swift
βββ Tuist.swift
βββ Workspace.swift
| Layer | λͺ¨λ | μν |
|---|---|---|
| App | GoForAWalk | μ± μ§μ μ , RootFeature μ€ν |
| Feature | Splash, SignIn, Main, Feed, History, Profile, Record, Settings | νλ©΄/μν/μ μ μ‘μ μ²λ¦¬ (TCA) |
| Domain | AuthService, CameraService, FeedService, UserService | λΉμ¦λμ€ API ν΄λΌμ΄μΈνΈ |
| Core | Networking, KeyChainStore, Camera | μΈνλΌ/μ μμ€ κΈ°λ₯ |
| UserInterface | DesignSystem | κ³΅ν΅ UI μ»΄ν¬λνΈ/리μμ€ |
| Shared | DependencyInjection, GlobalThirdPartyLibrary, Util | μμ‘΄μ± μ‘°λ¦½, μΈλΆ λΌμ΄λΈλ¬λ¦¬ μ§μ½, κ³΅ν΅ μ νΈ |
classDiagram
direction LR
class App
class Feature
class Domain
class Core
class UserInterface
class Shared
App --> Feature
App --> Shared
Feature --> Domain
Feature --> UserInterface
Feature --> Shared
Domain --> Core
Domain --> Shared
Core --> Shared
classDiagram
direction LR
class GoForAWalkApp
class DependencyInjection
class SplashFeature
class SignInFeature
class MainFeature
class FeedFeature
class HistoryFeature
class ProfileFeature
class RecordFeature
class SettingsFeature
class AuthService
class FeedService
class UserService
class CameraService
class Networking
class KeyChainStore
class Camera
class DesignSystem
GoForAWalkApp --> DependencyInjection
GoForAWalkApp --> SplashFeature
GoForAWalkApp --> SignInFeature
GoForAWalkApp --> MainFeature
MainFeature --> FeedFeature
MainFeature --> HistoryFeature
MainFeature --> ProfileFeature
MainFeature --> RecordFeature
MainFeature --> SettingsFeature
SplashFeature --> AuthService
SignInFeature --> AuthService
FeedFeature --> FeedService
HistoryFeature --> FeedService
ProfileFeature --> UserService
RecordFeature --> CameraService
RecordFeature --> FeedService
SettingsFeature --> AuthService
SettingsFeature --> UserService
AuthService --> Networking
AuthService --> KeyChainStore
FeedService --> Networking
UserService --> Networking
CameraService --> Camera
Networking --> KeyChainStore
SplashFeature ..> DesignSystem
SignInFeature ..> DesignSystem
MainFeature ..> DesignSystem
FeedFeature ..> DesignSystem
HistoryFeature ..> DesignSystem
ProfileFeature ..> DesignSystem
RecordFeature ..> DesignSystem
SettingsFeature ..> DesignSystem
sequenceDiagram
autonumber
participant App as GoForAWalkApp
participant Root as RootFeature
participant Splash as SplashFeature
participant Auth as AuthClient
participant Main as MainTabFeature
participant SignIn as SignInFeature
App->>Root: onAppear
Root->>Splash: splash.onAppear
Splash->>Auth: loadToken()
Auth-->>Splash: Token? λ°ν
alt ν ν° μ‘΄μ¬
Splash-->>Root: delegate.authenticated
Root->>Main: destination = .mainTab
else ν ν° μμ
Splash-->>Root: delegate.unauthenticated
Root->>SignIn: destination = .signIn
end
λͺ¨λμ Interface / Sources λΆλ¦¬λ₯Ό κΈ°λ³ΈμΌλ‘ μ¬μ©ν©λλ€.
- Feature/Core/Domain:
Interface,Sources,Testing,Tests(λͺ¨λλ³λ‘Demo,UITestsμ ν) - Shared/UserInterface: λͺ©μ μ λ§κ² λ¨μΌ
SourcesλλDemoν¬ν¨
μμ:
Projects/Feature/FeedFeature
βββ Interface
βββ Sources
βββ Testing
βββ Tests
βββ Demo
βββ UITests
| λΆλ₯ | λ΄μ© |
|---|---|
| Language | Swift 6 |
| UI | SwiftUI |
| Architecture | TCA (The Composable Architecture) |
| Build/Modularization | Tuist (.tuist-version: 4.88.0) |
| Networking | Alamofire |
| Auth | Kakao SDK, Sign in with Apple |
| Analytics/Crash | Firebase Analytics, Crashlytics |
- Xcode 16+
- iOS Deployment Target 18.0+
- Tuist 4.88+
# 1) Tuist μ€μΉ (mise μ¬μ© μ)
mise install tuist
# 2) μμ‘΄μ± μ€μΉ + νλ‘μ νΈ μμ±
make generate
# 3) μν¬μ€νμ΄μ€ μ΄κΈ°
open GoForAWalk.xcworkspace| λͺ λ Ήμ΄ | μ€λͺ |
|---|---|
make init |
νλ‘μ νΈ κΈ°λ³Έ νκ²½ μ΄κΈ°ν |
make signing |
μ½λ μλͺ μ€μ |
make generate |
μμ‘΄μ± μ€μΉ + νλ‘μ νΈ μμ± |
make ci_generate |
CI νκ²½μ© generate |
make cd_generate |
CD νκ²½μ© generate |
make module |
μ κ· λͺ¨λ μμ± |
make dependency |
λνλμ μΆκ° |
make clean |
μμ±λ .xcodeproj, .xcworkspace μ 리 |
make reset |
tuist clean + μμ± νμΌ μ 리 |