Denied v1.7 adds support for Catalina's Music.app

September 2019

Since the first Beta of macOS 10.15 Catalina became available on June 6th, I’ve been working on adding support for the new Music app that will replace iTunes to Denied.

A bug in the new operating system made this less than trivial unfortunately. Every time Denied tries to retrieve the title of the current track, it gets an error. After waiting nine beta releases for Apple to address the issue, I decided to ship an update that works around the issue.

This means that Denied version 1.7 with preliminary support for Catalina’s Music app is now available for download. 🚀

I say preliminary because it focusses on skipping tracks through one of the familiar filters. There is a known issue that prevents Denied from grabbing the track information when the app first launches and before Music.app was set to play, pause, skip to the next or previous track. As soon as Apple resolves the issue it should work exactly like it did on previous versions of macOS.

A screenshot showing Denied and Music.app on Catalina

Here’s a complete list of changes I made. It’s a pretty huge update!

Added

  • This update adds preliminary support for future versions of macOS and their music app.

👆 Apple rejects apps that mention the name of apps and macOS versions that haven’t been released yet, hence the vague mention of what this update actually introduces.

Changed

  • I’ve updated the project and its dependencies.
  • The animations have been redone.
  • The minimum supported version of macOS is now 10.14 Mojave.
  • Lots of under the hood improvements have been made.

Removed

  • The crash reporter has been removed, as the service I was using is being retired. I’m keeping an eye out for an alternative. You can always get help through support.dangercove.com

Carbonize v1.2.7 is out now

September 2019

Carbonize version 1.2.7 is now available for download.

The update contains a fix for the update carbon.now.sh shipped earlier this week. In the update they moved a button, which in turn made Carbonize hide the wrong interface element. I’m sorry for any inconvenience this caused.

To prevent this issue in the future, I’d like to ship an offline version of the underlying Carbon editor with Carbonize. This would allow you to use Carbonize fully offline and make sure an update to the Carbon website won’t break Carbonize.

I’m close to getting this to work, but it’s not quite ready yet. 🤞

Pipvid v1.2 is out now

September 2019

Pipvid version 1.2 is now available for download. You can also get it by checking for updates in the app.

The update contains some bug fixes and a rewritten license window. I’ve actually ported over the new license window from Timeless to Pipvid, making it easier to share updates across all my apps.

Want to try the new license window? Buy Pipvid today. 😉

A screenshot of the new license window. It's very similar to the old one.

Migrating away from DevMate: redirecting Sparkle updates

September 2019

DevMate is the service I use to gather download and install statistics for most of my apps. It also serves the update feeds for all non-Mac App Store apps. Earlier this year DevMate announced its retiring the platform in December.

A screenshot of my DevMate dashboard, showing about 50 downloads and 30 installs for Timeless in the past 30 days and 100 downloads and 60 installs for Pipvid

In this post I’ll outline how I’m preparing my apps to migrate to a new update feed. Christian Tietze mentions asking DevMate to point the Sparkle update feed to a new location. He also recommends to not rely on DevMate’s redirect to work forever. That’s where my approach comes in.

I urge you to take control over the feed URL entirely and redirect it yourself. DevMateKit uses Sparkle under the hood. This means a custom update URL can be specified by implementing a Sparkle delegate method.

Setting the URL

class ApplicationCoordinator: NSObject, Coordinator {

  ...
  
  private func configureUpdates() {
    DM_SUUpdater.shared().delegate = self
  }
}

extension ApplicationCoordinator: DM_SUUpdaterDelegate_DevMateInteraction {
    func feedURLString(for updater: DM_SUUpdater) -> String? {
        if Defaults.shared.isEnabled(setting: .betaUpdates) {
            return .appcastBetaURLString
        } else {
            return .appcastURLString
        }
    }
}

extension String {
    static let appcastURLString = "https://updates.dangr.co/\(Bundle.main.bundleIdentifier!)/appcast.xml"
    static let appcastBetaURLString = "https://updates.dangr.co/\(Bundle.main.bundleIdentifier!)/beta-appcast.xml"
}

After this change Timeless will check for updates at updates.dangr.co. I can set redirects for this domain however I want.

Redirecting

I use Netlify to handle the redirects. Here’s what that looks like:

com.dangercove.Timeless.Mac/appcast.xml*      https://updates.devmate.com/com.dangercove.Timeless.Mac.xml:splat       301
com.dangercove.Timeless.Mac/beta-appcast.xml* https://updates.devmate.com/beta/com.dangercove.Timeless.Mac.xml:splat  301

As you can see I currently redirect to the feed at DevMate, but I can redirect it anywhere else whenever I want. This allows me to use DevMate for as long as possible and switch to any other service that uses Sparkle. I’m keeping a close eye on App Center by Microsoft. They put Sparkle feeds for macOS on the roadmap for September.

I posted Timeless on /r/productivity

September 2019

I posted Timeless to the Productivity sub-reddit the other day to gather feedback. The entire post is included below. If you’d like to provide feedback on my tool to reduce time anxiety I encourage you to chime in, use the built-in feedback dialog in the beta or contact me on Twitter.

The comments are very encouraging!


Hi there, I’ve been working on Timeless, an app to reduce the Time Anxiety I’ve been experiencing. For me, it manifests like this:

  • 10.00 “Only 10 am?? It feels like I’ve been doing nothing.”
  • 11.30 “Better not start something new, it’ll be lunch soon.”
  • 14.00 “Sheesh this day is never going to end…”
  • 16.00 “It’s already 4 pm?? I did nothing today and it’s too late to start now.”

Six months ago I disabled the clock in the top right corner of my screen on my Mac. That worked wonders, but made it hard to stay grounded and remember mundane stuff like getting up to grab lunch. 😅

That’s when I created the small menu bar application that I’d like your feedback on. It’s currently available for free as a beta on usetimeless.app.

It works by setting time ranges that are then indicated in the corner of your screen instead of an actual clock. This means that when it’s 9.45am you might see a range that shows that it’s between 8am and 12pm. For me this reduces the mental burden some hours of the day give me, while still allowing me to naturally get through the day without feeling like a robot and setting tons of reminders. (I still set reminders for important events.)

I think it’s great, but I’d love for more people to try this approach and let me know what they think. I’m curious to find out if this is something that can be applied universally, and if there are features missing. In the last update for example, I added the option to only show the indicator on certain (work) days and just show the time when the indicator is idle.

Let me know what you think!

(The app is currently only available for macOS. I’ll start on a Windows version when I’ve gathered enough feedback. If you’re on Windows and still would like to help, disabling your clock and letting me know how it affects your day is very useful information to me!)

A screenshot of Timeless' indicator in the menu bar A screenshot of Timeless' indicator preferences