GymCoach
근력 트레이닝 기록 및 개인 AI 코치
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Open-source iPhone app that downloads your original FIT files from Wahoo and Zwift and shares them directly to HealthFit.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Deutsch · Website · Privacy Policy
FITgap is a small, open-source iPhone app that downloads your original FIT files from Wahoo, Zwift, MyWhoosh, Hammerhead, Dropbox and intervals.icu, or imports FIT files you open in it. It saves them to Apple Health with every metric, lap and route, without duplicates, or hands them unchanged to apps like HealthFit through the native share sheet. Files are never converted or re-encoded.
/Apps in your Dropbox. Later syncs only fetch changes..fit files in FITgap from the Files app, Mail or another app, or pick several at once in the app, for example exports from Garmin, TrainerRoad, Rouvy, Bryton or Karoo, or files from iCloud Drive, Dropbox or Google Drive. Invalid files are rejected, and a file already in FITgap is not added twice. Imported activities take part in the duplicate check and the Apple Health export like any other source.FITgap.xcodeproj in Xcode and select the FITgap scheme.Run the Swift package tests with:
swift test
The iOS keychain, sync lifecycle and UI tests are part of the Xcode scheme.
fitgap://oauth/wahoo, scopes user_read workouts_read) and a public client ID, no client secret. The client ID is defined in Sources/FITgapCore/WahooOAuth.swift. If you build your own version, register your own application in the Wahoo Cloud API portal and use its client ID and redirect URI.WhooshId). No token refresh is known, so an expired session requires signing in again. FIT files are fetched through signed download links without the access token. MyWhoosh may change or restrict this interface at any time.activity:read). Hammerhead requires a client secret for every token request and offers no PKCE, so the app has to carry the secret. It never enters the repository: put it into Config/Secrets.xcconfig (copy Config/Secrets.example.xcconfig; Xcode Cloud writes it from the secret environment variable HAMMERHEAD_CLIENT_SECRET in ci_scripts/ci_post_clone.sh). At build time scripts/hammerhead-secret.sh masks it with a random key per build; masking only slows down extraction from the app. Without a secret the app builds normally and hides Hammerhead. Hammerhead only accepts http(s) redirects, so the registered redirect is the static page docs/oauth/hammerhead/ on GitHub Pages, which hands code and state to fitgap://oauth/hammerhead without loading anything else. For your own version, create an API client in the Hammerhead Dashboard, register that page (or your own copy) as redirect and change the client ID in Sources/FITgapCore/HammerheadOAuth.swift.db-<app key>://2/token, the scheme Dropbox provides for mobile apps; token_access_type=offline for a refresh token), so there is no client secret. FITgap requests only files.metadata.read and files.content.read. An App folder app would need the least access, but it can only see its own folder under /Apps, while Zwift, Wahoo, Karoo and others write into their own folders there. So FITgap needs access, kept read-only by these two scopes; it lists recursively, downloads only files and checks each against the Dropbox content hash and the FIT header before storing it. The app key is set in ; while it is empty, the app hides Dropbox. For your own version, create an app with and in the , enable the two scopes, allow public clients (PKCE) and enter its app key; the redirect follows from the key.WhenUnlockedThisDeviceOnly, no iCloud sync).Application Support/FITgap/. Nothing is sent to a server operated by the project.See the full Privacy Policy.
| Path | Contents |
|---|---|
App/ | SwiftUI app, localisation (de.lproj, en.lproj), assets |
Sources/FITgapCore/ | Provider access, keychain, storage, FIT summary reader, demo data |
Sources/FITgapProbe/, Sources/WahooProbe/ | Small macOS command-line clients for API experiments |
Tests/, AppTests/, AppUITests/ | Package, iOS and UI tests |
scripts/ | Helper scripts, e.g. generate-demo-fit.py for the synthetic demo files |
Assets/ | Brand and App Store artwork |
docs/ | Project website (GitHub Pages) |
The bundled demo FITs contain no personal data or real GPS positions; they are virtual rides on made-up loops in the open South Pacific. They were generated synthetically with Garmin's official Python FIT SDK, which is only a development tool and not an app dependency.
Issues and pull requests are welcome. By submitting a contribution you agree that it is licensed under the Apache License 2.0 (section 5 of the license). Please keep changes focused and match the existing code style.
Licensed under the Apache License 2.0. The name FITgap, the logo and the app icon are not covered by this license and may not be used to identify modified versions or derived apps; see NOTICE.
The App Store version is a convenient, paid build of this same source code. You are free to build the app yourself.
FITgap is an independent project and is not affiliated with or endorsed by Wahoo, Zwift, MyWhoosh, Hammerhead, Dropbox, intervals.icu, Garmin or HealthFit.
/Apps.fitSources/FITgapCore/DropboxOAuth.swiftAPI_KEY) and athlete ID, both found under Settings › Developer Settings. There is no app registration and no client secret. FITgap downloads only the original upload (/api/v1/activity/{id}/file, gzip-compressed) and only when it is a FIT; activities imported from Strava and GPX or TCX originals are skipped. The key does not expire; regenerating it at intervals.icu ends FITgap's access.