Virtual Cycling Trainer app icon

Virtual Cycling Trainer

Version History

1.7.0

  • ERG power targets are charted on top of the power you actually pushed.
  • Resistance and slope changes are recorded and charted through the ride.
  • The live chart and the workout details show the same control values.
  • Custom workout layouts sync between your devices.
  • Sensors can be assigned on Apple Watch, not just iPhone.
  • Each device shows what the other one is connected to.
  • Trainer settings are shared between iPhone and Apple Watch.
  • Saved devices can be viewed and deleted at any time.
  • Assigning one sensor on both devices no longer blames your hardware.
  • A "Rate this app" row in Settings.
  • The Watch workout screen no longer leaves a gap in the middle.
  • Watch metrics no longer overlap the system clock.
  • The app goes idle in the background when no workout is running.
  • The trainer connection drops after five minutes idle, as intended.
  • A subscription in its billing grace period no longer locks you out.
  • A deleted workout leaves the list right away.
  • Total Calories no longer reads zero on a workout without basal data.
  • Long workouts keep their chart detail instead of losing points.
  • Custom layouts come back after a migration that failed.
  • Layout saves and deletes no longer report success when they failed.
  • Body Temperature is charted next to Skin Temperature.
  • The Use Trainer Calories toggle says the figure is the trainer's own.
  • "Watch App not installed" now mentions that watchOS 26 is required.
  • The device settings screen is easier to find.
  • The purchase screen addresses you consistently in French and Turkish.

1.6.1

  • Resistance percentages match what you ask for on every control.
  • Siri resistance shortcuts set a real percentage.
  • The Live Activity shows resistance as a percentage, not a raw level.
  • Asks whether you are done after a minute without pedalling.
  • Race marks sync between your devices.
  • Charts break across a pause instead of drawing through it.
  • A short recording no longer stretches across the whole ride.
  • Deleting a workout removes it, and no longer fails on a second attempt.
  • UK distances show at most two decimals.
  • The Watch reports a real iCloud sync status.

1.6.0

  • Mark a ride as a race, then filter your history to races.
  • Fixed a crash that could happen when using iPhone and Apple Watch together.
  • UK units read in miles on every screen.
  • Workouts keep elevation, skin temperature and Heat Strain Index when you have the sensors.
  • Workout records survive a workout deleted outside the app.
  • Activity rings stay hidden if you never set Activity goals.
  • Pause history survives a workout re-attaching to Apple Watch.
  • Refined labels and translations.

1.5.2

  • Opening Workout Layouts no longer freezes the app.
  • Rate how hard a ride felt using the Digital Crown on Apple Watch, not just by tapping.
  • Fixed the State of Mind prompt on Apple Watch — the face no longer covers the question, and the mood row responds to the crown.
  • Cards on Apple Watch are centred properly instead of drifting on smaller watches.
  • Heart rate zones now show where they came from: your own setting, Apple Health, or an estimate from your age.
  • A missing date of birth in Apple Health no longer hides your other details.
  • Bluetooth, sensor and trainer text is now translated instead of falling back to English.
  • Pauses and activity totals are kept when a ride reconnects after a dropped connection.
  • Refined labels and translations.

1.5.1

  • If your trainer drops its Bluetooth connection mid-ride, the ride now resumes by itself once the trainer comes back. Only the automatic-pause half of this had ever actually run; the resume half could never be reached. The app now recognises the pause it caused itself and resumes on evidence from the trainer in front of it, rather than guessing.
  • Steadier Bluetooth connections: each trainer and sensor is checked once when it connects, with a single owner for post-connect discovery, and a service lookup that fails still answers instead of leaving the connection half-configured.
  • Better background battery behaviour: with no ride running the app now genuinely goes idle instead of keeping its Bluetooth notifications alive, and an intentional idle disconnect no longer looks like an unstable link that needs recovering.
  • Rating how hard a ride felt is now a clear ten-point scale you tap directly, and the Effort and State of Mind prompts on the summary are properly translated in every language.
  • The orange used for metrics now has a light-mode value that actually meets contrast requirements — it previously fell well short of them and was hard to read on a bright screen.
  • Your Apple Watch no longer beeps every thirty seconds when you have deliberately declined an optional Health data type. Body-measurement types are now an explicit opt-in rather than something requested by default.
  • Your trainer shortcut lists are treated as your stored settings, so they no longer shrink to whatever the currently connected trainer reports.
  • Siri and Shortcuts commands for the trainer now follow the ride in this app rather than a workout running anywhere on the device, so they can no longer act on someone else's session.
  • The ride screen's Start button now honours your "Use Apple Watch" preference, and Apple Watch options no longer appear on devices where they don't apply.
  • Ride data mirrored from the Apple Watch no longer discards a batch silently when it cannot be read.
  • Refined labels and translations.

1.5.0

  • Family Sharing: the subscription and the lifetime unlock now come in Family versions, so one purchase covers up to five family members. The individual tiers stay exactly as they were.
  • Monthly payments with a 12-month commitment on the yearly plan — pay a smaller amount each month instead of the whole year up front. Requires iOS 26.4 or later, and isn't offered in the United States or Singapore.
  • One-tap trainer shortcuts: nine slots you configure in Preferences, each pairing a mode with a value — ERG watts, resistance percentage or slope. The defaults cover 50, 100 and 150 W, 0, 5 and 10 % resistance, and 0, 2 and 4 % slope. Tapping one mid-ride sets the mode and the target together, and you can type an exact value when editing a slot.
  • A roomier ride screen: when there's vertical space the trainer controls now sit as their own block instead of always sharing a paged view with the chart, and a new preference lets you split automatically, always show the controls, or keep them out of the way. On iPad the extra width is used too.
  • Trainer control is now read per device rather than shared across everything connected, so a heart rate strap or a separate sensor can no longer overwrite what your trainer reports it can do.
  • A trainer mode that stops being supported mid-ride is no longer left selected, which also stops the app sending control commands that were always going to be refused.
  • A cadence sensor you assign explicitly is now used for cadence — previously only an assigned power meter was respected, and cadence quietly came from the trainer instead.
  • The Home screen now tells you how many free rides are left this month, with a direct way to unlock, and warns you when Health access is missing so a ride can't silently go unrecorded.
  • You can delete a saved ride straight from the Sessions list.
  • The music player now hides itself when nothing is playing, instead of showing controls that can't start anything — and reappears on its own when you start a track.
  • On iPad: ride charts open as a pushed detail view instead of a sheet, and the Watch Status section no longer appears where there is no Watch.
  • Better battery behaviour: the app stops retrying its Bluetooth connection in the background when no ride is running.
  • Fixed a case where finishing a ride you meant to discard could still save it to Apple Health.
  • Fixed the paywall giving no feedback while a purchase was going through, and accepting a second tap on Buy.
  • Fixed Siri phrases that still referred to a treadmill, and completed their translations.
  • Fixed several Apple Watch mirroring issues around cancelling from the wrist and ending a ride.
  • Refined labels, plurals and translations.

1.4.1

  • Added a live metrics chart to the ride screen: your power and elevation build in real time as you ride, with your current target overlaid so you can see how each effort measures up at a glance.
  • Improved ride distance accuracy: the distance your trainer reports is now cross-checked against its own speed, unrealistic jumps are smoothed out, and distance is no longer added while a workout is paused.
  • Fixed misread speed data from some indoor bikes caused by a Bluetooth data mismatch.
  • The trainer control mode picker now shows only the modes your trainer actually supports — on both iPhone and Apple Watch — with clearer empty states when a control mode isn’t available.
  • ERG mode is steadier: the app no longer re-sends or reapplies a power target your trainer rejected, so it won’t fight the changes you make.
  • More reliable connections for trainers and sensors that expose several services at once, with clearer priority when a device can report the same metric in more than one way.
  • Added an onboarding tip showing you can connect your trainer directly from Apple Watch.
  • Refined the workout screen layout for a cleaner, better-balanced look, including centered stats in the wide layout.
  • Fixed the power-zone and FTP editor so your changes always stick.
  • Refined labels and translations.

1.4.0

  • Customizable workout layouts on iPhone and iPad: build your own ride screen — choose the stats you care about and arrange them just the way you like.
  • Many more stats are now available to place in your layout, including current, average, and peak power, cadence, heart-rate metrics, active and total energy, and time in power zones.
  • Added support for body temperature sensors: connect a compatible Bluetooth sensor to track core and skin temperature plus heat strain during workouts — great for heat training.
  • Trainer controls (ERG, Resistance, and Slope) are now more responsive and accurate — your adjustments show instantly and no longer snap back to the trainer’s reported value while you’re changing them.
  • Resistance mode now uses a clear 0–100% scale mapped to your trainer’s supported range.
  • Improved trainer control from Apple Watch, including full Shortcuts support and syncing your control mode and targets to the Watch when a workout starts.
  • The workout summary now shows your Activity rings.
  • Added average reference lines to the metric charts in workout details.
  • Workout preferences now sync between iPhone and Apple Watch, so settings you change on one device carry over to the other.
  • Added an option to skip the start countdown when beginning a workout, synced across your devices.
  • Workouts now save average and maximum speed to Apple Health.
  • Improved the workout view layout, with adaptive sizing that makes better use of space on smaller iPhones and in landscape, and stats that scroll when you add a lot of them.
  • Added Bluetooth sensor battery levels to the devices list and the home screen device status.
  • Added an optional iPhone battery readout to the landscape workout header.
  • Added a Redeem Code option to the paywall for App Store offer codes.
  • Added a Show Demo Trainer toggle to hide the demo bike when no trainer is connected, synced to Apple Watch.
  • Improved workout start reliability on iPhone and Apple Watch — fixed several ways a start could hang, get stuck, or leave a phantom workout behind.
  • Cancelling a workout start on iPhone no longer starts the workout on Apple Watch anyway.
  • Improved automatic reconnection when your trainer drops the connection, turns off and on again, or changes its Bluetooth identity.
  • More reliable iPhone and Apple Watch mirroring: live metrics recover automatically if mirroring stalls mid-workout, with fewer false connection-stalled moments and a cleaner recovery after a genuine disconnect.
  • Fixed live average speed collapsing to the current value instead of showing the true average.
  • Fixed heart-rate readings sent by the trainer itself still being used after turning off Allow Trainer Heart Rate.
  • Fixed the workout timer staying at zero when starting a new workout on iPhone after using Apple Watch.
  • Refined labels and translations.

1.3.2

  • Workout view now defaults to dark mode. You can change this in Preferences.
  • Added No Control mode for older trainers that use proprietary control systems but still provide standard power and cadence sensors, so workouts can be recorded without controlling the trainer.
  • Live Activity timer fixes and reliability improvements.
  • FTP (Functional Threshold Power) now also loads from Apple Health.
  • Added simple watchOS complications so you can quickly open a workout.
  • Device name overrides now appear consistently across the app.
  • In light mode workout view, timer and pause button colors are now easier to read.
  • Zero distance no longer displays as cm or inches.

1.3.1

  • Improved controls sync between Apple Watch and iPhone.
  • Made workout controls more responsive and more accurate.
  • Improved workout start error handling on Apple Watch.
  • Added a proper Devices screen button in workouts on both Apple Watch and iPhone.

1.3.0

  • Control your trainer right from your watch with new trainer controls.
  • Connect your trainer directly to your watch, with no iPhone required.
  • iPad support is here: connect your trainer and train on the big screen.
  • Workout now shows the connected trainer during the session.
  • On iPhone, landscape workout view now shows the system clock.
  • Improved visibility of key workout text in light mode, including the timer and pause button.
  • Added a loading indicator when opening workout details.
  • Fixed live sensor data in the Devices screen to show values only from the current sensor.
  • The app now occasionally asks for a review after you finish a workout.
  • Fixed an issue where some Bluetooth devices could remain stuck in the Connecting state.
  • Apple Watch now shows an overlay when starting a workout and syncs the start timer with the iPhone.
  • Session list now updates correctly after completing a workout.
  • Devices list improvements: correct device names are shown instead of “unknown device”, and you can swipe right to open device configuration.
  • Various smaller fixes and FTMS reliability improvements.

1.2.1

  • Device configuration screen now shows trainer data that was previously filtered out.
  • Workout summary once again includes State of Mind.
  • Trainer-reported calories now update correctly after pausing and resuming a workout.
  • Various smaller fixes and stability improvements.

1.2.0

  • New Sessions view to browse past workouts and their metrics.
  • Redesigned iOS summary view to match past workout details, with support for sharing as an image.
  • Clearer error message when starting a workout while the Watch is locked.
  • The "Prepare Watch" step can now be skipped when starting a workout.
  • Fixed trainer heart rate sensor still being assigned when disabled in device configuration.
  • FTMS reliability improvements; reduced background activity when no workout is active and trainer is connected.

1.1.0

  • Trainer now has per-device configuration, shown when you first connect a device. You can test the device and preview live data from this screen.
  • Main view now shows all connected devices (e.g. heart rate sensor) when a trainer is connected.
  • Workouts on iPhone now display activity rings during the workout.
  • watchOS app now has Preferences to override some settings locally on the watch.
  • Unassigning the trainer’s heart rate source is now correctly saved across app launches.
  • Improved device connection status: a yellow indicator appears when the app couldn’t request device control (you may need to restart the device).
  • When connection to the trainer fails, an error is shown instead of repeated reconnect attempts.
  • Trainer-reported calories can now be used instead of Apple Health’s built-in calorie calculation.
  • Reworked workout starting flow with a fullscreen status overlay.
  • Short workouts under 3 minutes are now discarded by default; this can be overridden in Preferences.
  • Free workout limit now counts only workouts of 5 minutes or longer.
  • Fixed tap area in Bluetooth devices list.
  • Bluetooth devices list now shows connection progress.
  • Bluetooth devices list now displays proper error messages when a device needs to be re-paired in system settings.
  • Fixed crash caused by FTMS data race condition.
  • Workout now automatically hides and resumes when trainer disconnects and reconnects.
  • Simplified Bluetooth devices list by removing technical details.
  • Various smaller Bluetooth and FTMS reliability improvements.

1.0.3

  • Fixed crash when editing heart rate zones.
  • Fixed crash when editing power zones.
  • Fixed decimal formatting throughout the app.
  • Improved FTMS stack error handling.

1.0.2

  • Happy New Year! Keep cycling and stay active in 2026.
  • Improved workout mirroring reliability by following Apple's recommended practices; mirroring failures should no longer occur.
  • Added failsafes for mirroring errors; if mirroring fails, the app displays an error message while keeping the workout screen visible.
  • Prevent iPhone screen from auto-locking during active workouts. This can be disabled in Preferences.
  • Added More Apps section to Preferences.
  • Email contact button added to Preferences.
  • Added Advanced preferences: pause workout on trainer disconnect, attaching logs to email, and exporting raw logs.
  • Improved Bluetooth and FTMS stack stability with various bug fixes and optimizations.
  • Added support for total distance received from the trainer, instead of calculating from speed.

1.0.1

  • Added a toggle to prefer Bluetooth heart rate sensors; turn it off to keep using Apple Watch/iPhone heart rate.
  • Ignore zero-value readings from external heart rate sensors and fall back to HealthKit more reliably when Bluetooth data drops out.
  • Auto-reconnect assigned Bluetooth devices as soon as they come online, without duplicate connection attempts across categories.
  • Live sensor readings (power, cadence, heart rate) now surface inline in the Devices list when connected.
  • Heart rate samples from Bluetooth devices now carry device info into HealthKit for better provenance.

1.0.0

  • Initial release.

← Back to Virtual Cycling Trainer