한국어 · English
아이폰 하나로 스윙을 찍고, 볼 스피드와 발사각을 재고, 코스에서 클럽을 고르는 네이티브 골프 앱.
모르는 숫자는 지어내지 않고 "측정 불가"라고 말합니다.
iPhone 17 Pro 시뮬레이터 (iOS 26.4), 4라운드. 홈 · 스윙 · 가상 비행 · 코스 / 클럽 추가 · 다크 모드 · 퍼포먼스 · 영어 화면
- 🎥 스윙 촬영·분석: 기기가 지원하는 고속 촬영(120/240fps)과 소리 녹음. Vision 2D 자세 추정, 8단계 스윙 구간(어드레스~피니시), 템포. 임팩트 순간은 녹음된 타구음으로 찾아요.
- 🎯 런치모니터 실험적: 정면에서 240fps, 셔터 1/2000초로 찍으면 공 지름(42.67mm)을 자로 삼아 볼 스피드와 발사각을 계산해요. 촬영 화면에서 실시간 측정을 켜면 타구음을 듣고 바로 값을 보여주고, 찍어 둔 영상으로도 잴 수 있어요. 잰 샷은 런치 기록에 쌓이고 클럽별 평균을 보여줘요.
- 🏌️ 클럽 카탈로그: 2000~2026년 23개 브랜드, 클럽 1,515개, 샤프트 93종, 슬리브 17종. 커스텀 샤프트, 0.25인치 단위 길이, 슬리브 위치별 로프트·라이 변화까지 입력해요.
- 🪂 가상 비행: 볼 스피드, 발사각, 스핀을 넣으면 RK4 물리 모델로 캐리, 최고 높이, 낙하각을 시뮬레이션해요.
- 🗺️ 코스·라운드: MapKit 코스 검색, GPS 거리, 9/18홀 스코어카드, 샷 기록. 내 클럽 데이터로 50%/80% 낙하 영역을 그려요.
- 📈 퍼포먼스·코칭: 연습 세션, 클럽 갭, 일관성. 근거가 충분할 때만(같은 각도·클럽 5회 이상) 코칭 문장을 보여줘요.
- 🌏 12개 언어 · 독립 단위: 한국어, 영어, 일본어, 중국어(간체·번체), 스페인어, 포르투갈어, 독일어, 프랑스어, 이탈리아어, 태국어, 베트남어. 거리·속도·풍속·온도 단위를 따로 바꿀 수 있어요.
- 🔒 로컬 우선: 계정, 광고, 분석 SDK, 서버가 없어요. 영상은 기기 안에만 저장돼요.
화면의 모든 숫자에는 어디서 왔는지가 붙어 있어요. 아이폰 카메라 한 대로는 알 수 없는 값을 그럴듯하게 채우지 않아요.
| 앱 표시 | 뜻 · 예시 |
|---|---|
| 측정값 | 기기 센서로 잰 값 · GPS 거리, 프레임 시간 |
| 비전 분석값 | 영상 분석 · 자세, 볼 스피드, 발사각 |
| 오디오 기반 | 녹음된 소리 · 임팩트 시각 |
| 추정값 | 규칙으로 추정, 직접 수정 가능 · 스윙 구간 |
| 시뮬레이션 | 물리 모델 계산 · 캐리 범위, 가상 비행 |
| 사용자 입력 | 직접 입력 · 클럽 평균 거리, 스코어 |
| 측정 불가 | 아이폰 한 대로는 알 수 없음 · 스핀, 클럽 스피드 |
flowchart TD
A["📱 정면 촬영<br/>240fps · 1/2000초"] --> B["🔊 소리로<br/>임팩트 찾기"]
B --> C["⚪ 어드레스 공 지름<br/>= 42.67mm 자"]
C --> D["🎯 임팩트 직후<br/>6프레임 추적"]
D --> E["볼 스피드<br/>발사각"]
E --> F["캐리 범위<br/>(공개 스핀으로 시뮬레이션)"]
E -.-> G["스핀 · 클럽 스피드<br/>측정 불가"]
- 합성 영상에서는 볼 스피드 오차 0.1%, 발사각 오차 0.01° 이내예요.
- 실시간 측정은 마이크로 타구음을 듣고, 버퍼에 담아 둔 직전·직후 프레임으로 같은 계산을 해요. 합성 스트림에서는 임팩트 후 약 0.1초 만에 계산할 프레임이 모여요. 실제 iPhone에서의 지연 시간은 아직 재지 않았어요.
- 실제 샷으로는 아직 검증하지 않았어요. TrackMan 옆에서 10샷 이상 찍어 볼 스피드 ±3%, 발사각 ±1.5° 안에 들어야 "실험적" 표시를 뗄 수 있어요.
- 자세한 설계: Docs/Specs/LaunchMonitor.md
Note
개발 중이에요. App Store에는 아직 없어요. 합격 기준표는 Docs/Acceptance.md에 있어요.
| 검사 | 결과 |
|---|---|
| iOS 빌드 (Swift 6) | ✅ 에러 0 · 경고 0 |
| 코어 테스트 | ✅ 85 / 85 |
| 앱 · UI 테스트 (시뮬레이터 2종) | ✅ 29 + 11 |
| 12개 언어 문구 | ✅ 누락 0 / 689 |
| 실제 iPhone 촬영 · 자세 · GPS | ⬜ 실기기 대기 |
| 런치모니터 정확도 | ⬜ TrackMan 비교 대기 |
| App Store 준비 | ❌ 개발자 계정 필요 |
| 합격 기준표 | ✅ 12 / 29 · 🟡 9 · ⬜ 6 · ❌ 2 |
앱 · UI 테스트: iPhone 17 Pro (iOS 26.4), iPhone Duo (iOS 27.1)
Codex가 구현하고, 리뷰어가 코드를 직접 돌려 보며 검증하는 라운드 방식으로 만들고 있어요. 매 라운드마다 더 강한 프롬프트를 쓰고, 서로의 코드를 리뷰하고 반박해요. "전부 통과했다"는 보고도 리뷰어가 재현하기 전에는 인정하지 않아요.
- 1라운드 · v6.0: 앱 기본 구조, 4개 탭, 촬영, 자세 분석, 코스
리뷰 · 응답 · 반박 - 2라운드 · v7.0: 스윙 구간 감지, 타구음으로 임팩트 찾기, 비행 물리, 코칭
리뷰 · 반박 - 3라운드 · v8.0: 첫 네이티브 빌드, 시뮬레이터 테스트, 연습 세션
응답 - 4라운드 · v9.0: 클럽 카탈로그, 공개 참고 데이터, 두 시뮬레이터 통과, 런치모니터
리뷰
라운드별 변경 내용은 Releases에서 볼 수 있어요.
최신 릴리스에 서명하지 않은 SwingLab-<버전>-ios-unsigned.ipa가 있어요.
Apple은 내 기기용으로 서명된 앱만 실행하므로, 설치하면서 내 Apple ID로 서명해 주는 도구를 써요.
| 방법 | 설명 |
|---|---|
| AltStore / SideStore (추천) | 무료 Apple ID로 설치. 서명은 7일마다 앱이 알아서 갱신해요 |
| Sideloadly | Mac·Windows에서 USB로 설치 |
| Xcode | 아래 "직접 빌드하기"대로 본인 팀으로 서명 |
자동 업데이트: AltStore나 SideStore에서 Sources → + 로 아래 주소를 한 번 추가하면, 새 릴리스가 나올 때마다 My Apps에 업데이트로 떠요.
https://github.com/jongsu-king/SwingLab/releases/latest/download/altstore-source.json
Mac의 iOS 시뮬레이터용 SwingLab-<버전>-ios-simulator-arm64.zip(Apple 실리콘)도 함께 있어요:
압축을 풀고 xcrun simctl install booted SwingLab.app. 모든 파일의 체크섬은 SHA256SUMS.txt에 있어요.
App Store·TestFlight 배포는 Apple Developer 계정이 필요해서 아직 하지 않았어요.
필요한 것: Xcode 27.1 이상, iOS 17 이상. 외부 라이브러리와 API 키는 없어요.
git clone https://github.com/jongsu-king/SwingLab.gitopen SwingLab/SwingLab.xcodeprojSwingLab 스킴과 iPhone 시뮬레이터를 고르고 실행하면 돼요. 실제 iPhone에서는 Signing & Capabilities에서 본인 개발 팀과 번들 ID를 지정해야 해요.
테스트 명령어
swift testScripts/verify.shxcodebuild -project SwingLab.xcodeproj -scheme SwingLab -destination 'platform=iOS Simulator,name=iPhone 17 Pro' test폴더 구조
| 경로 | 내용 |
|---|---|
SwingLab/App |
앱 시작, 탭, 온보딩 |
SwingLab/Features |
화면 (스윙, 코스, 퍼포먼스, 마이백, 가상 비행, 런치모니터) |
SwingLab/Services |
카메라, 영상, 자세, 위치, 런치 영상 분석 |
SwingLab/Resources/Catalog |
클럽·샤프트·슬리브 카탈로그 JSON |
Sources/SwingLabCore |
UI와 무관한 계산: 단위, 스윙 구간, 임팩트 소리, 비행 물리, 런치 추적, 낙하 영역 |
Tests, SwingLabTests, SwingLabUITests |
코어·앱·UI 테스트 |
Scripts |
프로젝트 생성, 번역 빌드, 카탈로그 검증 |
Docs |
프롬프트, 리뷰, 라운드 기록, 설계 문서, 스크린샷 |
소스 파일을 추가하면 python3 Scripts/generate_project.py, 번역을 고치면 python3 Scripts/build_localizations.py를 실행해 주세요.
계정이 필요 없고, 광고·분석 SDK와 업로드 서버가 없어요. 촬영한 영상과 기록은 기기 안에만 저장되고, 설정에서 한 번에 지울 수 있어요. 자세한 내용은 Docs/PrivacyPolicy.md에 있어요.
MIT 라이선스예요. 자세한 내용은 LICENSE에 있어요.







