Skip to content

DDD-Community/Attendance_iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

398 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DDD 출석 iOS

DDD Logo

DDD IT 동아리를 위한 출석 관리 시스템

Platform Language iOS Xcode TCA Tuist Fastlane

📱 App Store | 🎯 Features | 🏗 Architecture | 🚀 Quick Start


📖 프로젝트 소개

DDD 출석은 DDD IT 동아리의 출석 관리를 효율적으로 도와주는 iOS 애플리케이션입니다. 간단하고 직관적한 인터페이스로 동아리원들의 출석 현황을 관리하고, 동아리 활동을 체계화할 수 있도록 지원합니다.

💡 우리는 왜 이 앱을 만들었을까요? DDD IT 동아리의 출석 관리를 위한 번거로운 과정을 줄이고, 개발자들이 학습과 네트워킹에 더 집중할 수 있는 환경을 만들고자 합니다.

🛠 Setup

AI 도구 연동

프로젝트 규칙은 AGENTS.md에 정의되어 있습니다. Claude Code 사용 시 심볼릭 링크를 연결하세요.

ln -s AGENTS.md CLAUDE.md

📱 스크린샷

메인 화면 로그인 출석 관리
출석 멤버 프로필 일정

✨ 주요 기능

🔐 간편한 인증

  • Google OAuth 2.0: 간단한 구글 계정 로그인
  • 자동 로그인 유지: 재실행 시 자동 인증 상태 유지
  • 보안 강화: OAuth 2.0 기반 안전한 인증 시스템

📊 출석 관리

  • 실시간 출석 체크: 빠르고 정확한 출석 확인
  • 출석 상태 관리: 출석, 지각, 결석, 대기 상태 구분
  • 출석 이력 조회: 개인별 출석 현황 및 통계
  • 출석률 통계: 시각적 통계 정보 제공

👥 멤버 관리

  • 스터디 멤버 목록: 전체 참가자 현황 확인
  • 멤버 상태 조회: 각 멤버의 출석 패턴 분석
  • 관리자 권한: 스터디 운영진을 위한 관리 기능

📱 사용자 경험

  • 직관적 UI/UX: 간단하고 명확한 인터페이스
  • 실시간 동기화: 서버와의 실시간 데이터 동기화
  • 오프라인 지원: 네트워크 없이도 기본 기능 사용 가능
  • 다크 모드: 시스템 설정에 따른 다크/라이트 모드 지원

🏗 프로젝트 아키텍처

🎯 Clean Architecture with Tuist

DDD-Attendance-iOS/
├── 📱 Projects/
│   ├── App/                     # 메인 애플리케이션 타겟
│   │   ├── Sources/
│   │   │   ├── Application/     # AppDelegate, SceneDelegate
│   │   │   ├── Di/             # Dependency Injection
│   │   │   ├── Reducer/        # TCA Root Reducer
│   │   │   └── View/           # Root Views
│   │   ├── Resources/          # Assets, Fonts, Localizations
│   │   └── Tests/              # App 레벨 테스트
│   │
│   ├── Presentation/           # 🎨 UI Layer
│   │   ├── Auth/               # 로그인/인증 화면
│   │   ├── Splash/             # 스플래시 화면
│   │   ├── OnBoarding/         # 온보딩 화면
│   │   ├── Management/         # 출석 관리 화면
│   │   ├── Member/             # 멤버 관리 화면
│   │   ├── Profile/            # 프로필 화면
│   │   ├── Web/                # 웹뷰 화면
│   │   └── Presentation/       # 공통 프레젠테이션 유틸
│   │
│   ├── Domain/                 # 🔥 Business Logic Layer
│   │   ├── Entity/             # 도메인 엔티티
│   │   ├── UseCase/            # 비즈니스 로직 구현
│   │   └── RepositoryInterface/ # Repository 프로토콜
│   │
│   ├── Data/                   # 📡 Data Layer
│   │   ├── Repository/         # Repository 구현체
│   │   ├── DataSource/         # 로컬/원격 데이터소스
│   │   └── Model/              # DTO, Response Models
│   │
│   ├── Network/                # 🌐 Network Layer
│   │   ├── Foundation/         # 네트워크 기반 설정
│   │   ├── Service/            # API 서비스 구현
│   │   └── Configuration/      # 네트워크 설정
│   │
│   └── Shared/                 # 🔧 Shared Layer
│       ├── DesignSystem/       # 디자인 시스템
│       ├── Utility/            # 공통 유틸리티
│       └── Extension/          # Swift Extensions
│
└── 🔧 Tuist/                   # 프로젝트 설정
    ├── Package.swift
    ├── ProjectDescriptionHelpers/
    └── Dependencies.swift

🏛️ Clean Architecture Pattern

graph TD
    A[🎨 Presentation Layer] --> B[🔥 Domain Layer]
    B --> C[📡 Data Layer]
    D[🌐 Network Layer] --> C
    E[🔧 Shared Layer] --> A
    E --> B
    E --> C

    A -.-> F[SwiftUI Views]
    A -.-> G[TCA Reducers]
    B -.-> H[Use Cases]
    B -.-> I[Entities]
    C -.-> J[Repositories]
    C -.-> K[API Services]
Loading

📊 의존성 그래프 (Tuist Graph)

Dependency Graph

프로젝트 모듈 간 의존성 관계도 (자동 생성)

🔄 의존성 방향 원칙

Presentation → Domain (UseCase Protocol)
       ↓
Domain/UseCase → Domain (Repository Protocol)
       ↓
Data/Repository → Domain (Entity + Repository Protocol)
       ↓
Network/Service → Data (API 통신)

핵심 설계 원칙:

  • Presentation은 Domain의 UseCase만 의존
  • Domain은 외부 계층에 의존하지 않는 순수 비즈니스 로직
  • Data는 Domain의 Entity와 Repository Protocol을 구현
  • ✅ 모든 데이터 흐름은 Domain을 중심으로 진행

📚 개발 가이드 문서

프로젝트의 상세한 개발 가이드라인은 docs/ 폴더의 문서들을 참고하세요:

🏗️ 아키텍처 & 패턴

🎨 UI & UX 시스템

🚀 성능 & 최적화

🛠️ 개발 환경 & 협업

💡 참고: 이 가이드 문서들은 AI 에이전트들도 참조하여 프로젝트의 일관성 있는 코드 품질을 유지합니다.

🛠 기술 스택

Core Technologies

  • 🎯 Architecture: The Composable Architecture (TCA) 1.25.5
  • 📦 Modularization: Tuist 4.x (Micro Feature Architecture)
  • 💉 Dependency Injection: WeaveDI 3.4.0
  • 🔀 Navigation: TCAFlow 1.1.0 (커스텀 라이브러리)
  • ⚡ Concurrency: Swift Concurrency (async/await)

📚 주요 라이브러리

🎯 아키텍처 & 상태 관리

  • ComposableArchitecture 1.25.5 - 단방향 데이터 플로우 및 상태 관리
  • TCAFlow 1.1.0 ⭐️ - TCA 기반 화면 전환 및 네비게이션 (커스텀)
  • WeaveDI 3.4.0 ⭐️ - 의존성 주입 컨테이너 (커스텀 포크)

🔐 인증 & 보안

🌐 네트워킹

  • AsyncMoya 1.1.8 ⭐️ - async/await 기반 HTTP 클라이언트 (커스텀)

🎨 UI & UX

🔥 백엔드 서비스

🛠 개발 도구 & 유틸리티

📊 로깅 & 디버깅

  • LogMacro: 커스텀 로깅 매크로
  • IssueReporting: 개발 단계 이슈 추적
  • XCTestDynamicOverlay: 테스트 환경 오버레이

⚡ 성능 & 동시성

  • Clocks: 시간 관련 유틸리티
  • ConcurrencyExtras: Swift Concurrency 확장
  • Swift 6.0: 최신 Swift 언어 기능

🔧 빌드 & 배포

  • Tuist: 프로젝트 생성 및 의존성 관리
  • Swift Package Manager (SPM): 패키지 의존성 관리
  • fastlane: 자동화된 빌드 및 배포

📱 지원 환경

  • 💻 Xcode: 16.0 이상
  • 📱 iOS: 17.0 이상
  • ⚡ Swift: 6.0 이상
  • 🔧 Tuist: 4.x 이상

🚀 빠른 시작

✅ 필수 요구사항

  • 💻 Xcode: 16.0 이상
  • 📱 iOS: 17.0 이상
  • ⚡ Swift: 6.0 이상
  • 🔧 Tuist: 4.x 이상

🛠 설치 및 실행

1️⃣ 저장소 클론

git clone https://github.com/DDD-Community/Attendance_iOS.git
cd Attendance_iOS

2️⃣ Tuist 설치

curl -Ls https://install.tuist.io | bash

3️⃣ 프로젝트 빌드 및 생성

# 전체 워크플로우 (권장)
./make build      # clean → install → generate

# 또는 단계별 실행
./make clean      # 기존 파일 정리
./make install    # 의존성 설치
./make generate   # 프로젝트 생성

4️⃣ Xcode에서 실행

open DDDAttendance.xcworkspace

⚙️ 환경 설정

프로젝트 실행을 위해 다음 설정이 필요합니다:

// Config 파일에서 설정 (Dev.xcconfig, Prod.xcconfig)
BASE_URL = api.dddstudy.kr/
GOOGLE_CLIENT_ID = YOUR_GOOGLE_CLIENT_ID
GOOGLE_IOS_CLIENT_ID = YOUR_GOOGLE_IOS_CLIENT_ID
REVERSED_CLIENT_ID = YOUR_REVERSED_CLIENT_ID

🛠️ 주요 명령어

🔄 기본 워크플로우

./make build      # 전체 빌드 프로세스 (권장)
./make generate   # 프로젝트 생성만
./make clean      # 빌드 아티팩트 정리
./make install    # 의존성 설치

🚨 문제 해결

tuist clean       # Tuist 캐시 정리
./make clean      # 모든 빌드 파일 정리

🔍 코드 품질 관리

tuist graph       # 의존성 그래프 생성
tuist test        # 전체 테스트 실행

📱 fastlane 자동화

fastlane ios beta               # TestFlight 배포
fastlane ios release            # App Store 배포
fastlane ios screenshots        # 스크린샷 자동 생성
fastlane ios build_for_testing  # 테스트 빌드

fastlane 주요 기능:

  • 자동화된 빌드 및 배포
  • App Store Connect 관리
  • 인증서 및 프로필 관리
  • 스크린샷 자동 생성

📋 사용법

1️⃣ 초기 설정

  1. 앱 다운로드 및 설치
  2. Google 계정으로 로그인
  3. 권한 설정 (푸시 알림 등)

2️⃣ 출석 체크

  1. 출석 탭에서 현재 스터디 세션 확인
  2. 출석 체크 버튼 터치
  3. 출석 상태 자동 업데이트 (출석/지각/결석/대기)

3️⃣ 출석 현황 조회

  1. 통계 탭에서 개인 출석률 확인
  2. 달력 뷰로 월별 출석 패턴 확인
  3. 상세 이력 조회 가능

4️⃣ 프로필 관리

  1. 프로필 탭에서 개인 정보 확인
  2. 설정 메뉴에서 앱 환경 설정
  3. 로그아웃 및 계정 관리

📄 라이선스

이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참고하세요.

👥 팀 & 크레딧

💻 개발팀

🛠 기술 스택

  • iOS: Swift Xcode Fastlane

  • Server: AWS EC2 AWS Swagger

  • Design: Figma

  • VCS: Git GitHub

🐈‍⬛ Git 브랜칭 전략

1️⃣ Git Branching Strategy

  • Main Branch: 프로덕션 배포용
  • Develop Branch: 개발 통합 브랜치
  • Feature Branch: 기능별 개발 브랜치

📋 워크플로우

  1. Develop 브랜치에서 Feature 브랜치 생성
  2. Feature 브랜치에서 개발 진행
  3. FeatureDevelop Pull Request
  4. 코드 리뷰 및 충돌 해결 후 머지
  5. DevelopMain 배포용 Pull Request

📞 문의 및 지원


Made with ❤️ by DDD Team

Star this repo

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors