MC-Timer

Version History

Version 1.9.1

September 2025

  • 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).

Version 0.0

February 2019

  • Created the iPhone project.
  • Chose product name 'MC Timer'.
  • First reasonably workable playback solution.
  • Sets up collection view layout and cells.
  • First set of app icons.