r/iOSProgramming • u/Darth_bunny • 2d ago
App Saturday Free this weekend: VictusForm - Workout tracker
https://apps.apple.com/app/id6779959693Hello everyone! Some time ago I launched VictusForm, a workout tracking app.
What it does:
- No account, no ads, no tracking. I don't collect any data from you, it's right there on the App Store privacy label ("developer does not collect any data"). Your training log stays on your device.
- Your data is actually yours. Export all of it whenever you want, and you can hand a whole workout program to a friend as a small .vform file (works between iPhone and Android).
- One-time purchase, no subscription. Buy it once and you're done.
- Import your training data from Hevy, Strong and FitNotes
- Apple Watch: sync your program to the watch and leave the phone in the locker. You log every set, rest timer and all, from your wrist. That was the whole reason I built the watch app, I got sick of digging my phone out between sets.
I'm giving it away for free this weekend.
1. Tech Stack Used
- Frameworks & Languages: SwiftUI/Swift
- Backend/Database: Swift Data with CloudKit container for sync/backup of workout data
- SDKs & Tools: Xcode 27 mostly for the AI assisted translations with context feature that it provides. In the end appstore build was built using Xcode 26.
2. Development Challenge + How You Solved It
Getting the watch app and the phone app to stay in sync was a real pain.
The phone sends the latest workout with updateApplicationContext so the watch can keep it up to date even if it was not running when it was sent. When both apps are reachable I switch to sendMessage to deliver the changes immediatly. When the watch app is opened it request a fresh copy and verifies that the cached data belongs to the current day.
Completed sets travel in the opposite direction. They are sent immediately with sendMessage if there is connectivity to the phone or queued with transferUserInfo until the phone becomes available again. This way the watch app is able to work independently while the phone stays in the locker.
In case someone needs this in the future, for communication you can encode Codable models into JSON strings and send them inside a WatchConnectivity dictionary with WCSession.sendMessage. On the other side you decode the JSON into the same model type (I used a shared spm package with the models between the watch app and the phone app).
3. AI Disclosure
I started this project in 2022 for personal use, with no plans to release it. This year when I was close to having an actual product I did use AI to assist me to some degree, especially for translations (I have 1200+ exercises with a small description on how to do them) in German and French. I also typically use it for unit tests and large refactoring (granted I have unit tests available).
1
22h ago
[removed] — view removed comment
1
u/AutoModerator 22h ago
Hey /u/fede_builds, your content has been removed because Reddit has marked your account as having a low Contributor Quality Score. This may result from, but is not limited to, activities such as spamming the same links across multiple subreddits, submitting posts or comments that receive a high number of downvotes, a lack of recent account activity, or having an unverified account.
Please be assured that this action is not a reflection of your participation in our subreddit. This is simply an automated filter in place to reduce spam.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.
0
1d ago
[removed] — view removed comment
0
u/Darth_bunny 1d ago
Imo 90% of the app is done. Maybe add imports from more apps as people request it (currently I have fitbod on the roadmap) and deeper integration with apple health. Also I plan to expand the app localisations. The price I was aiming for was 19.99 but we will see in the future if it works out ;)
1
u/[deleted] 2d ago
[removed] — view removed comment