Skip to content

Repository files navigation

MyBall ⚾️

야구팬들아 모여라 — 위젯으로 쉽게 KBO 일정 확인하자

마이팀을 설정하면 시즌 경기 일정을 자동으로 불러와 캘린더로 보여주는 iOS 앱입니다.

주요 기능

  • 마이팀 설정 — KBO 10개 구단 중 응원팀 선택
  • 홈 대시보드 — 다음 경기, 이번 달 성적, 리그 순위, 최근/주간 경기 한눈에 보기
  • 마이팀 커스터마이징 — 홈 화면에 마이팀을 크게 표시, 기본 캐릭터 대신 직접 고른 사진으로 교체 가능 (위젯·Live Activity에도 동일하게 반영)
  • 캘린더 — 월별 그리드에서 홈/원정 경기를 팀 고유 색으로 구분 표시
  • 직관 기록 — 실제로 보러 간 경기에 좌석/메모/사진을 남기고, 직관 승률을 따로 집계
  • 경기 상세 — 상대팀, 시간, 장소 확인 + iOS 캘린더 추가 + 배경화면 생성
  • 라이브 경기 센터 — 실시간 루상 주자, 볼카운트, 선발투수 확인 (KBO)
  • 홈화면 위젯 — Small/Medium/Large 3종, 다음 경기와 주간 일정 표시
  • 잠금화면 Live Activity — 앱을 열면 자동 시작, Dynamic Island에서 실시간 경기 현황 확인
  • 경기 시작 알림 — 원하는 시간 전에 푸시 알림, 탭하면 라이브 경기 센터로 이동
  • 배경화면 생성 — 다음 경기 정보를 담은 배경화면 3가지 스타일로 만들어 저장

기술 스택

  • Swift 5.9+ / SwiftUI
  • 최소 타겟: iOS 17.0
  • 아키텍처: MVVM + Clean Architecture
  • 비동기: Swift Concurrency (async/await)
  • 로컬 저장: SwiftData(직관 기록) + UserDefaults(App Group 공유)
  • 네트워크: URLSession
  • 위젯 · Live Activity: WidgetKit / ActivityKit
  • 캘린더 연동: EventKit
  • 알림: UserNotifications
  • 사진 선택: PhotosUI (PhotosPicker)

프로젝트 구조

Myball/
├── App/                    # 앱 진입점 (@main, SwiftData 컨테이너, 루트 화면 분기)
├── Core/                   # 앱 전용 공통 유틸리티 (알림/Live Activity 서비스, 캘린더 연동, 디자인 토큰 등)
├── Domain/                 # 비즈니스 로직 (순수 Swift, UI 의존 없음)
│   ├── Models/              # Team, Game, League, TeamRecord, AttendanceRecord(직관 기록) 등
│   ├── Protocols/            # Repository 인터페이스
│   └── UseCases/
├── Data/                   # 네트워크(KBO/네이버 API), 캐시, Repository 구현
├── Features/                # 화면별 모듈 (View + ViewModel)
│   ├── TeamSelection / Home / Live / Calendar / GameDetail
│   ├── Settings / Wallpaper / Debug(#if DEBUG)
├── Shared/                  # 메인 앱 + 위젯 익스텐션 양쪽 타겟에 포함되는 파일
│   ├── BaseballCharacterView.swift   # 팀 캐릭터 렌더링
│   ├── GameActivityAttributes.swift  # Live Activity 데이터 정의
│   ├── MyTeamPortraitView.swift      # 마이팀 사진/캐릭터 표시 (앱·위젯 공용)
│   └── TeamImageStore.swift          # 마이팀 커스텀 사진 저장소 (App Group)
└── Resources/

MyballWidget/                # WidgetKit 익스텐션 (홈화면 위젯 + 잠금화면 Live Activity)

API

  • KBO 공식 사이트 API — 일정/결과/순위 (KBOAPIClient)
  • 네이버 스포츠 API — 실시간 라이브 정보 (NaverAPIClient)

두 API 모두 비공식이라 언제든 변경될 수 있어 에러 핸들링과 캐시를 함께 사용합니다.

App Group

  • ID: group.com.myball.shared
  • 메인 앱 · 위젯 익스텐션이 UserDefaults, SwiftData, 마이팀 커스텀 사진 파일을 공유합니다.

빌드 & 실행

# Xcode에서 프로젝트 열기
open MyBall.xcodeproj

# 또는 터미널에서 빌드
xcodebuild -scheme Myball -destination 'platform=iOS Simulator,name=iPhone 17'

자세한 코드 컨벤션과 개발 참고사항은 CLAUDE.md를 참고하세요.

About

야구팬들아 모여라 위젯으로 쉽게 일정 확인하자

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages