iOS 알람 앱 프로젝트 개발기

호씨·2025년 1월 7일
0

iOS 알람 앱 프로젝트 개발기 🚀

프로젝트 소개 💡

iOS 기본 알람 앱을 벤치마킹하여 알람, 스톱워치, 타이머 기능을 구현한 프로젝트입니다. MVVM 아키텍처를 적용하고 팀원들과의 효율적인 협업을 위해 Git Flow 전략을 도입했습니다.

프로젝트 정보

기술 스택 🛠

개발 환경

  • Xcode 15.0
  • iOS 17.0+
  • Swift 5.9

사용 기술

  • Architecture: MVVM Pattern
  • UI Framework: UIKit
  • Local Storage: UserDefaults, CoreData
  • Async Programming: Combine, GCD
  • Version Control: Git, GitHub
  • Design: Figma

주요 기능 구현 ✨

1. 알람 기능

  • 알람 추가/편집
    // 알람 데이터 모델
    struct Alarm {
        let id: UUID
        var time: Date
        var label: String
        var isEnabled: Bool
        var repeatDays: [WeekDay]
        var sound: AlarmSound
    }
  • 반복 설정 (요일 별 설정 가능)
  • 알람음 선택 기능
  • 다시 알림(스누즈) 기능
  • 알람 활성화/비활성화 토글

2. 스톱워치 기능

  • 정밀한 시간 측정 (1/100초 단위)
  • 중간 기록(랩타임) 저장
  • 일시정지/재시작
  • 기록 리스트 제공
    class StopwatchViewModel {
        private var timer: Timer?
        @Published var elapsedTime: TimeInterval = 0
        @Published var laps: [TimeInterval] = []
        
        func startTimer() {
            timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true) { [weak self] _ in
                self?.updateTime()
            }
        }
    }

3. 타이머 기능

  • 커스텀 시간 설정
  • 실시간 카운트다운 표시
  • 타이머 종료 시 알림
  • iOS 스타일의 시간 선택 UI
    class TimerViewController: UIViewController {
        private let timePickerView: UIPickerView = {
            let picker = UIPickerView()
            picker.backgroundColor = .clear
            return picker
        }()
        
        private func setupTimePicker() {
            // 시, 분, 초 선택 가능한 피커뷰 구성
        }
    }

4. UI/UX 디자인

  • iOS 디자인 가이드라인 준수
  • 다크모드 지원
  • 직관적인 사용자 인터페이스
  • 부드러운 애니메이션 효과

심화 구현 사항 🔥

1. 타이머 UI 고도화

  • 원형 프로그레스바 구현
    class CircularProgressView: UIView {
        private let progressLayer = CAShapeLayer()
        
        func setProgress(_ progress: Float) {
            let animation = CABasicAnimation(keyPath: "strokeEnd")
            animation.fromValue = progressLayer.strokeEnd
            animation.toValue = progress
            animation.duration = 0.25
            progressLayer.strokeEnd = CGFloat(progress)
            progressLayer.add(animation, forKey: "animateProgress")
        }
    }
  • 실시간 애니메이션 처리
  • 제스처를 통한 시간 조절

2. 애니메이션 효과

  • 화면 전환 커스텀 애니메이션
  • 인터랙티브 전환 효과
  • 스프링 효과를 활용한 자연스러운 모션

아키텍처 설계 📐

MVVM 패턴 적용

역할 분담 및 협업 👥

담당 파트

담당자역할주요 구현 기능
유태호타이머- 시간 선택 UI
- 카운트다운 기능
- 알림 구현
이재건메인 화면- 알람 리스트 UI
- 데이터 관리
- 상태 관리
서현욱탭바/스톱워치- 탭바 구현
- 스톱워치 기능
- 랩타임 기록
오푸른솔알람 화면- 알람 설정 UI
- 사운드 선택
- 반복 설정
서지민알람 모달- 모달 UI
- 시간 선택
- 데이터 전달

Git 협업 전략

1. 브랜치 구조

main
└── develop
    ├── feature/alarm/MainView
    ├── feature/alarm/stopwatch
    ├── feature/Ryu/TimerView
    ├── feature/alarm-alert
    └── feature/alarm/editor

2. 커밋 컨벤션

# 커밋 메시지 구조
type: subject

body

footer

# 예시
feat: Add alarm repeat functionality

- Implement weekday selection
- Add repeat status indicator
- Update alarm model

Resolves: #123

3. 코드 리뷰 프로세스

  1. PR 생성 시 상세한 설명 작성
  2. 최소 3명의 approve 필요
  3. 코드 리뷰 피드백 반영 후 merge

협업 문화 🤝

데일리 스크럼

  • 매일 17:00에 진행
  • 진행 상황 및 이슈 공유
  • 기술적 난제 토론

문서화

  • README 지속적 업데이트
  • 코드 주석 철저히 작성
  • 회의록 작성 및 공유

팀 커뮤니케이션

  • 즉각적인 이슈 공유
  • 코드 리뷰 시 건설적인 피드백
  • 정기적인 회고 진행
profile
이것저것 많이 해보고싶은 사람

0개의 댓글

관련 채용 정보