iOS 기본 알람 앱을 벤치마킹하여 알람, 스톱워치, 타이머 기능을 구현한 프로젝트입니다. MVVM 아키텍처를 적용하고 팀원들과의 효율적인 협업을 위해 Git Flow 전략을 도입했습니다.
Xcode 15.0
iOS 17.0+
Swift 5.9
MVVM Pattern
UIKit
UserDefaults
, CoreData
Combine
, GCD
Git
, GitHub
Figma
// 알람 데이터 모델
struct Alarm {
let id: UUID
var time: Date
var label: String
var isEnabled: Bool
var repeatDays: [WeekDay]
var sound: AlarmSound
}
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()
}
}
}
class TimerViewController: UIViewController {
private let timePickerView: UIPickerView = {
let picker = UIPickerView()
picker.backgroundColor = .clear
return picker
}()
private func setupTimePicker() {
// 시, 분, 초 선택 가능한 피커뷰 구성
}
}
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")
}
}
담당자 | 역할 | 주요 구현 기능 |
---|---|---|
유태호 | 타이머 | - 시간 선택 UI - 카운트다운 기능 - 알림 구현 |
이재건 | 메인 화면 | - 알람 리스트 UI - 데이터 관리 - 상태 관리 |
서현욱 | 탭바/스톱워치 | - 탭바 구현 - 스톱워치 기능 - 랩타임 기록 |
오푸른솔 | 알람 화면 | - 알람 설정 UI - 사운드 선택 - 반복 설정 |
서지민 | 알람 모달 | - 모달 UI - 시간 선택 - 데이터 전달 |
main
└── develop
├── feature/alarm/MainView
├── feature/alarm/stopwatch
├── feature/Ryu/TimerView
├── feature/alarm-alert
└── feature/alarm/editor
# 커밋 메시지 구조
type: subject
body
footer
# 예시
feat: Add alarm repeat functionality
- Implement weekday selection
- Add repeat status indicator
- Update alarm model
Resolves: #123