Fixes a problem
related to multiple lists of exercise suggestions when "None" ("No
Exercises") was chosen for one of the sets. This rendered the workout to
become unusable.
Scheduling the saving of iCloud database changes to
be executed on the main thread.
Minot changes to the formatting of the
in-app change log.
Version 1.9
May 2025
Adds support for multiple
lists of exercise suggestions. A database model update was needed for this,
adding a lane index to the list item types used by the exercise lists.
Updates the keyboard toolbar buttons to support navigating between multiple
exercise lists.
Adds a lane selection view, to select which exercise
lane to play during which set.
Provides alternative dark and tinted
icons for iOS 18. De-emphasises the yellow watch on the dark app icon.
Renamed countdown beeps option to "Three Countdown Beeps"; there are
three short count-down beeps and one longer start beep.
Fixes a bug
preventing items to be deleted from the music playlists and songs view.
Apparently, wrapping a List inside a VStack is not supported.
Minor
adjustment to the padding for the welcome button.
Updates projects
settings as recommended by Xcode.
Fixes a typo in some of the debug
messages: counrry -> country. watchOS
Updated app icon with more
resemblance to the iOS app icon after App review deemed the two icons to be too
different to each other. Yet, this wasn't objected to last time. tvOS
Minor UI changes: taller workout boxes, limiting the title to 2 lines.
Even less prominent ring backgrounds.
Version 1.8
April 2025
Adds a watchOS companion app to record your workout and to control the
MC-Timer session that is playing on your iPhone. Since your watch is paired to
your iPhone, a session playing on other devices cannot be controlled,
sorry.
Moves the Add Workout and the Settings buttons to the top of
the list.
Adds a button to create an example workout: 20 sets with 45
seconds work and 15 seconds pause.
Changes the "Five Countdown
Beeps" option to be a "Four Countdown Beeps" options: three shorter
countdown beeps and one longer start beep. However, this name is a bit
misleading and will be renamed to "Three Countdown Beeps" in the next
release.
When using AirPlay, the music preparation time is increased,
such that the music starts playing just at the right time.
Removed the
animation for the progress circle while the playlist is loaded. It seems to
have blocked the UI too often. The progress is still visible, but it updates in
discrete steps, rather than smooth animations.
Allows developer token
to be refreshed without checking for the cloud service authorization first.
This token is now always checked first before looking for a user token. Also
added a unit test to check the download of a new developer token. For the test
scripts, the token is stored in a local file that is refreshed only once a day.
Finally, there is a new Xcode build phase to always check the validity of the
embedded developer token.
Adds app intents for Siri and
Shortcuts.
Adds support for localizable strings. However, there are no
language translations yet.
Updates the artwork caching mechanism to be
more SwiftUI-compliant.
Re-enabled SwiftLint for all builds.
Implemented changes suggested by SwiftLint.
Updated the playlist
artwork preview image that is used for Pure Cardio Workout in the screenshot
images.
Refactored some SwiftUI modifier API related to
accessibility.
Refactored unit tests to use the Swift Testing
framework. No longer runs the pre-build or post-build phase scripts for
"clean" builds.
Updating target settings suggested by Xcode 16.1.
Rebuild for the iOS 18.4 SDK. watchOS
New companion app to record a
workout session.
Stores exercise metrics in HealthKit.
Adds
buttons to control playback of the MC-Timer session on your iPhone.
Shows heart rate graph and your activity rings, visualizing the changes in
your heart rate, over the exercise steps. This is shown during the workout and
when finished.
Also shows the current state of your activity rings in
a separate screen as well as on the summary screen that is shown when the
workout has finished.
State updates are transferred with dedicated
data packages. Using a distinct "ready" state update to let the watchOS app
know that a workout session has been selected. A "start" state update is used
when the session has been started.
Created a dedicated icon for the
watchOS app. Since the Apple Watch is basically using a dark appearance style,
the icon needed to be less black to be useful. tvOS
Adds a progress
spinner when waiting for iCloud data. Without this, the app would appear to be
unresponsive.
Allows using a demo workout with an Apple Music workout
playlist. The Demo button will appear after a delay, but only when no iCloud
data was found. For the demo, music is chosen from the first playlist that is
returned when searching Apple Music for the keyword "workout".
Version 1.7
November 2024
Adds voice announcements of exercise suggestions.
At the beginning of the rest phase, the next exercise title is announced, or,
for very short rest phases, the next exercise is announced near the end of the
current work phase. For optimal results, feel free to select your preferred
voice in the Settings app under Accessibility > Spoken Content > Voices. Note
that you can download additional or enhanced voices there.
Adds a
"speech" button to the play screen with which the voice announcements can be
toggled on or off.
Offers a selection of lead phrases for the
announcements. There are also generic phrases like "Step (n) of (t)" or "(N)
more" where the current step count (n), total step count (t), or the remaining
step count (N) are inserted. Also, a user-defined lead phrase may also be
defined.
Adds a "Well Done!" voice announcement when the workout is
finished.
Supports system voices. Note that they are
device-specific.
New default shorter time format: MM:SS. The previous
MMm SSs format can be re-enabled via setting.
Revived the AirPlay
route picker button to allow the selection of external devices like Bluetooth
speakers.
Revised the feedback messages shown when a workout is
prepared for playback.
Improved feedback for Apple Music access
issues, e.g. when offline.
Adds a What's New button with recent
update information.
Adds a detailed diagnostics view to make it
possible to inspect system messages, e.g. related to iCloud or Apple
Music access.
Refreshes play screen when the current workout is
deleted by the user.
Reloads the music play list when returning to the
app later, i.e. after four hours.
Improves the feedback shown
when searching for items on Apple Music. A progress spinner is shown until the
search results are available.
Using either a NavigationView or a
NavigationStack, depending on the current operating system version.
Built for iOS 18.1 and iPadOS 18.1.
tvOS
Adds a settings
view for voice-related preferences. You can select the audio lead phrase (or a
random one) and the voice that should be used. Note that you can download
additional voices in the Settings app under Accessibility > VoiceOver >
Voice.
Adjusted the button sizes.
Built for tvOS 18.1.
Version 1.6
September 2023
Adds 8 new bells and effect sounds:
sleigh bells, tubular bells, harp, jaw harp, vibraslap, rubber boing, slide
whistle, and ricochet.
Alsp shows the next exercise suggestion on the
playback screen, either in smaller text underneath the current exercise (on
iPhone), or on the right-hand side of the screen (on iPad in landscape). Fine
tuned how the texts are shown. Out of necessity, long texts will be scaled or
truncated.
Added a secondary pause button which will pause the workout
but will let the music to continue playing.
Improved the progress
information that is shown while a playlist is loaded.
Refined the app
icon with a better representation of a side plank.
Chaned the playback
view to show the session name near the top, provided there is enough space for
it, e.g. on iPhone 14, but not on iPhone 8.
When there are no
user-defined exercise suggestions, the playback screen on iPhone will say
"Exercise" or "Rest".
Revised design for iOS 16.
Using
collection views rather than tables.
Session details now make use of
sheets, thus avoiding the use of navigation stacks. Sadly, those no longer work
properly on iOS 16.
The add buttons are now always visible at the
bottom of the lists.
Adjusted the setup of the Apple Music connection
protocol.
Revised the auto-loading mechanism of the top-most session
when the app is started.
Fine-tuned the music selection screen. Taps
next to song titles are now also registered to start or stop playing the
song.
Fixes an issue when trying to delete the last digit in a text
field of a workout set.
Tries a little harder to start playing the
music.
tvOS
Adds support for the new bells and effect
sounds.
Alsp shows the next exercise suggestion on the right-hand side
of the screen.
Added a secondary pause button which will pause the
workout but will let the music to continue playing.
Sessions in the
list are now shown with a blurred background.
Refined the app icon
with a better representation of a side plank.
Build for tvOS 16.
other
Uncountable iterations to fine-tune the screenshot
generation scripts.
'Revised fastlanes
Fastfile to skip re-generating screenshots for devices that did not trigger
an error. Thus only focusing on the remaining, troublesome devices.
Version 1.5
February 2022
Adds 11 new Science Fiction sounds.
Now
shows the first exercise suggestion before the session is started. To support
this, the session title is shown in a separate label.
Changed the
pre-start message to show how many songs where loaded to the playlist.
Adds volume sliders to the in-app settings screen with which the relative
volume levels of the beep and alert sounds can be adjusted. The recommended
default settings are: beep volume 50%, and alert volume 80%.
Updated
the Apple Music search view.
Items in the Apple Music search results
will be checked when they are already in the playlist.
Tapping an item
in the Apple Music search results will play them, making it easier to decide
which item should be added.
Added a "Load more…" button to
retrieve the next page of search results from Apple Music.
Adjust some
internal timings to keep the Reset button from flashing up at the start of a
workout.
Add special debug messages that can be made visible in the
app.
Added a switch to the settings bundle, shown in the Settings app,
with which the in-app debug messages can be enabled.
Updates internal
debug logging functions.
tvOS
Adds two helper points to make
it possible to reach the countdown button in the center.
The default
focus remains on the start/pause button, even when it cannot be selected while
the playlist is being loaded. This avoids unnecessary button flickering.
The start/pause button becomes a reset button when finished.
Version 1.4
January 2022
Adds a list of exercise suggestions. During
playback, these will be shown instead of the session title. On iPad or Apple
TV, the exercise will be shown on the left-hand side.
Added an option
to shuffle the exercise suggestions.
Enhanced the exercise suggestions
to support paired exercises like "left/right lunges" can be expanded to two
steps: "left lunges" followed by "right lunges". To support this, paired
exercises need to contain names in the style of word-slash-word. Example:
"side plank, left/right".
Exercise pairs are kept together, even
when all exercises are shuffled.
The exercise suggestions are shown in
green prior to the next set.
New sounds: electric buzzer, chapel bell,
church bell, Big Ben, vinyl scratch, and Edgar the raven.
Adds a new
countdown beep alternative: a single beep, 5-seconds before the next step.
Doubled the size of the reset button to increase its visibility.
Increased the space for the total session seconds test.
Created a
new CoreData database version to support generic list items.
Now
requires iOS 15.1 or later. Or tvOS 15.1 or later.
On Apple TV,
resolved an iCloud synchronization issue.
Removed the output route
picker view.
Reworked animations to work again with iOS 15.
Fixes the backwards button when in the middle of a set.
Hides the
list separator in the main list.
Replaced UITextField wrappers with
SwiftUI TextFields. Likewise, replaces the keyboard toolbar with a SwiftUI
implementation.
Adds multiple retries for cases where the
AVAudioPlayer failed to load the next sound.
Experimented using a
circular progress text; later discarded.
Revised aspects of the
playback mechanism.
Diverse stability enhancements.
tvOS
Fixes an iCloud synchronization issue.
Version 1.3
June 2021
When you mark a workout as a favourite, it will be listed before your other
workouts in the list. Select the heart-styled Like button on the main screen of
a workout to mark it as a favourite.
Adds an option to run a workout
without playing any music. To disable music playback, deselect 'Play Music' in
the playlist screen. You can still play countdown beeps or sound effects as
usual.
No-music workouts are given a crossed-out music cover art.
Repositions the set-skip-buttons on Apple TV to make them easier to reach
even when the workout has not been started yet.
Added a delete command
to the context menu on Apple TV.
Adjusted the music playback handling
when receiving a phone call in the middle of an ongoing workout. Music should
now continue to play after the call is finished.
Adds a guard
condition to avoid loading new cover artworks when those that had been loaded
previously are still available. tvOS
You can mark a workout as a
favourite by selecting 'Like' in the context menu of a workout.
Version 1.2
March 2021
Adds a track preview player to the playlist view. Tap
a song or playlist to play it. Tap again to stop.
Resetting the
playback of the current workout is now also possible when the playback is
paused during the initial 5-second-countdown.
Fixes an issue with
selecting _personal_ Apple Music playlists. However, due to playback issues,
rather than adding clumsy workarounds for undocumented features, these
playlists have now been hidden. Note that you can still use _curated_ Apple
Music playlists as well as your playlists from your (iTunes) media library.
Also, you can still add any number of individual songs.
Refines
playlist (re)assembly, making sure that the playlist is changed when a
different workout is selected. Also, changes made to the playlist prior to
starting a session should also be incorporated.
Instead of a song
title, you may now see "no music selected" when your playlist is empty or
when your media library items cannot be found.
Adds a circular
progress indicator to give better feedback while the playlist is
assembled.
At the end of a session, when shuffling is enabled, the
playlist will be reloaded. This is not new, but I added a "Shuffling
Playlist…" message to make it more prominent.
Optimizes access
checks on startup. Playlist can only be loaded once all required access to your
music is determined.
Eliminates some duplicate API requests for Apple
Music.
Version 1.1
February 2021
Adds optional countdown beeps.
Can be enabled for music start or stop sounds.
Revives background
audio support.
Tries harder to stop music, e.g. over
Bluetooth.
Unloads a deleted session from the playback screen.
Hopefully fixes a rarely seen view height issue.
Version 1.0
February
2021
Release version.
Requires iOS 14.
Version 0.4
February 2021
Beta-testing builds.
Product name is now
"MC-Timer".
Adds a "Select for Playback" button to the session
details screen.
Adds an alert when none of the chosen songs are
available on a device.
Fixes playback of effect sounds when pressing
the items in the list in quick succession. Also, random sounds now preview a
different sound for each press.
Re-enables the access check for Apple
Music.
Dims the background when the playback screen is open.
Version 0.3
January 2021
Integration with Apple Music. Adds the Apple
Music subscription view. Curated playlists can now be chosen. User-defined
playlists can be added. Individual songs can be added. All of these will be
combined during playback.
Fixes some progress ring animation glitches.
Stops animating the text strings.
Shows a progress spinner in place of
the play button when the playlist is being downloaded and assembled.
Now increments the session's play count when having been active after the
half-way point.
Adds a confirmation alert before deleting a
session.
Another alert when trying to replace an ongoing session.
Uses a CoreData (iCloud) data model to facilitate across-device
synchronization.
Uses SwiftUI for the windows and graphics. Discards
animated marquee texts.
Adds wrappers for UIKit views like the media
item selection controller and customized text fields.
Moves minimum
deployment target to iOS 14.
tvOS
Added MC-Timer app for
Apple TV. Created a wide-screen-specific user interface. Added a
background screen image.
Version 0.2
During 2020
Introduces a
3-second countdown when the first step starts with a music phase (as it
normally would).
Adds album cover images and animations.
Streamlines code to display the title of the currently playing song.
Adds messages to the main welcome screen when access to the music library
was denied.
Adds a message why a session may not be playable.
Adds emoji warning triangles to important messages strings.
Adds
accessibility labels. Splits some buttons to avoid confusion for use with
Voice-Over.
Adds timer countdown/up options to the settings. Links to
the system settings from within the settings screen.
Preparations for
Apple Music. Adds mandatory usage description. Adds handling of the MusicKit
developer tokens; generation and texting via a Ruby script. Introduces code to
download playlists and songs via the MusicKit API and an implementation of
Future and Promises.
Introduces a music box to manage songs and
playlist from both Apple Music and the on-device (iTunes) media library.
Improves background queue handling and table view updates.
Tracks
modification date for sessions.
Corrects use count updating.
Core Spotlight indexing, Siri app intents.
Creates a QR code for
sharing sessions between users.
Fine-tunes screenshot generation. Adds
a mock music player and a mock volume view for use in the simulator. Uses
example songs and artworks.
Fixes swiftlint warnings.
Version 0.1
During 2019
New app icon with gradient background.
Generic album cover icon.
Adds a welcome cell that is shown
whenever there are no workouts in the list. Pressing it will create a new
workout session.
Now using a musically inspired background image on
the main screen.
Adds a new top-level controller to house the main
play view screen. Allows play view to transition into a smaller view at the
bottom of the screen.
Optimizes playlist to combine consecutive work
or rest phases.
New progress ring view to animate the set and session
progress. Updated to use a gradient. Changed the gradient to use an
ease-in-ease-out transitions function rather than a linear gradient.
Adds now playing info support.
Migrates to iOS 13. Discards button
icons in favour of new SF Symbols font icons.
Adds dark mode colour
assets. Adds support for a user setting to override the system dark mode,
allowing the app to be always light, or always dark.
Adds multiple
bell sound resources. Designs support for random sound selections. Adds support
for an additional finish sound, played when a workout has been played all the
way through.
Disables landscape interface orientation. That just
looked horrible, sorry.
Adds a long-press gesture recognizer to open
an action sheet when a session is pressed in the main view. A session can now
be deleted from that action menu.
Throws out the top-level collection
view controller in favour of a simple and reliable table view controller.
Adjusts the cells to make use of rounded corners and transparent padding.
Adds a watchOS target for a simple remote-control watch app. Tunes
communication between MC-Timer and the watch app. A separate watch icon is
needed.
Adds a Settings.bundle. Incorporates third-party license
agreements into the bundle. Adds our own end user license agreement (EULA).