본문으로 건너뛰기

변경 이력

너홀로러닝의 개발 변경 사항을 기록합니다.

[1.0.0] - 2026-04-11

🎉 첫 출시

Running Tracker: GPS & Stats의 첫 공개 버전입니다.

주요 기능

  • 실시간 GPS 추적 — 거리, 페이스, 칼로리, 고도를 실시간으로 표시
  • 지도 시각화 — Google Maps 기반 러닝 경로 표시
  • 주간/월간 통계 — 아름다운 차트와 분석
  • 배지 시스템 — 목표 달성 시 성취감을 주는 14개 배지
  • 완전한 히스토리 — 날짜별로 정리된 러닝 기록
  • Google 로그인 — 간편한 계정 시스템
  • 음성 알림 — 킬로미터 마일스톤마다 음성 안내
  • 프라이버시 우선 설계 — GPS 경로 데이터는 기기에만 저장

출시 전 빌드 이력

1.0 심사 제출까지 4번의 빌드 반복을 거쳤습니다. 각 단계에서 발견된 이슈를 해결했습니다.

빌드 1 (2026-04-11 12:30)

  • 초기 업로드
  • 기본 앱 기능 포함

빌드 2 (2026-04-11 12:59)

  • Privacy Manifest 추가PrivacyInfo.xcprivacy 파일로 Required Reason API 선언 (Apple이 2024년 5월부터 의무화)
  • 인앱 계정 삭제 기능 추가 — App Store Review Guideline 5.1.1(v) 준수 (홈 화면 프로필 아바타 → Delete Account)
  • Launch Screen 브랜딩 — Flutter 기본 placeholder를 브랜드 이미지로 교체 (#0C6848 배경 + 앱 아이콘 중앙)
  • Export Compliance 자동 처리ITSAppUsesNonExemptEncryption=false Info.plist 설정

빌드 3 (2026-04-11 13:29)

  • 위치 권한 설명 추가NSLocationAlwaysAndWhenInUseUsageDescription 키 추가 (geolocator 패키지가 참조하는 iOS API 때문에 필수)
  • Apple의 ITMS-90683 경고 해결

빌드 4 (2026-04-11) — 심사 제출 빌드

  • iPhone 전용 설정TARGETED_DEVICE_FAMILY = "1" 로 변경
  • iPad 스크린샷 요구사항 회피 (1.0은 iPhone 전용으로 출시)

개발 과정 (출시 전)

🎨 러닝 중 화면 UX 재설계

초기에는 Duration이 가장 큰 요소로 표시되는 전형적인 트래커 UI였습니다. 실제 러너의 사용 맥락을 고려해 완전히 재설계했습니다.

새로운 정보 계층:

  1. 거리 (Hero) — 화면 중앙의 거대한 숫자 (84pt)
  2. 원형 프로그레스 링 — 5km 목표 기준 자동 확장 (5K → 10K → 하프마라톤 → 풀마라톤 → 다음 5K)
  3. 페이스 — 존별 자동 색상 변화
  4. Duration — 보조 정보로 축소
  5. 칼로리/고도 — 최소 정보로 하단

페이스 존 색상 시스템 (숫자 없이도 상태 파악):

페이스상태색상라벨
< 4:00/km과속🔴 빨강SPRINT PACE
4:00~5:30/km고강도🟠 주황RACE PACE
5:30~7:00/km최적🟢 녹색TRAINING PACE
7:00~9:00/km여유🔵 파랑EASY PACE
> 9:00/km걷기⚪ 회색WALKING

시각 효과:

  • 화면 가장자리 펄스 글로우 (러닝 상태 표시)
  • 거리 숫자 부드러운 카운트 애니메이션
  • 프로그레스 링의 SweepGradient 애니메이션
  • 일시정지 시 주황색, 러닝 중 녹색으로 상태 전환

🔊 음성 알림 + 화면 잠금 방지

flutter_ttswakelock_plus 통합.

음성 알림 내용:

  • 러닝 시작: "Let's run!"
  • 매 1km 달성: "X kilometers. Pace M minutes S seconds per kilometer."
  • 시간 기반 (1km 이후 매 5분): "M minutes. X kilometers."
  • 러닝 종료: "Run complete. X kilometers in M minutes. Great job!"

화면 잠금 방지:

  • 러닝 시작 시 자동 활성화 (WakelockPlus.enable())
  • 러닝 종료/취소 시 자동 해제
  • 블루투스 이어폰으로 음성을 들으면서 폰을 주머니에 둘 수 있음

🎯 앱 아이콘

Python/Pillow 스크립트로 프로그래밍 방식 생성:

  • 디자인: 진녹색 그라데이션 배경(#0C6848 → #043424) + 흰색 러닝 경로 곡선
  • 시작 지점 마커: 왼쪽 링
  • 러너 위치: 오른쪽 큰 원
  • 드롭 섀도우: 입체감 부여
  • flutter_launcher_icons로 모든 iOS/Android 해상도 자동 생성
  • 알파 채널 없음 (App Store 요구사항)

🔐 프라이버시 아키텍처 검증

코드 분석 결과:

데이터저장 위치
계정 정보 (이메일, 이름)Firebase Auth
러닝 요약 (거리, 시간, 페이스, 칼로리)Cloud Firestore (암호화)
GPS 경로 데이터기기 로컬 JSON 파일 (ApplicationDocumentsDirectory/routes/)
GPS 좌표 서버 전송없음

→ Apple App Privacy 선언에서 "Precise Location: Not Collected"를 선언할 수 있는 유일한 러닝 앱.

🌐 영문 문서화 (Docusaurus i18n)

기존 한국어 전용 문서 사이트를 다국어로 확장:

  • docusaurus.config.js에 영문 locale 추가
  • 개인정보 처리방침 + 이용약관 영문 번역 (GDPR/CCPA 조항 포함)
  • 네비게이션/푸터 다국어화
  • Docusaurus 3.x의 enen-US 경로 정규화 이슈 해결
  • GitHub Actions로 자동 배포 (main 브랜치 푸시 시)

📱 Android 정리

  • 불필요한 위치 권한 제거
    • FOREGROUND_SERVICE
    • FOREGROUND_SERVICE_LOCATION
    • ACCESS_BACKGROUND_LOCATION
  • 앱 이름을 running_trackerRunning Tracker로 변경
  • 코드와 일치하지 않는 권한은 Google Play 심사 리스크

버전 정책

  • Semantic Versioning 사용: MAJOR.MINOR.PATCH
  • MAJOR: 큰 UX 변경 또는 호환성 깨짐
  • MINOR: 새 기능 추가
  • PATCH: 버그 수정

Build number(+N)는 App Store Connect 업로드 시마다 증가.