May 9 2020 Update: Commenter Miles Wolbe has come up with a much better solution. Ignore everything in this tip, and just run this Terminal command:
sudo softwareupdate --ignore "macOS Catalina" && defaults delete com.apple.preferences.softwareupdate LatestMajorOSSeenByUserBundleIdentifier && softwareupdate --list
If you're interested in why this works, Miles explains it in more detail. I've tested this method, and it works—no more agent required!
I have no plans to move my main iMac to macOS Catalina, at least for the forseeable future. There are two key apps I use—Fujitsu's ScanSnap scanner software and the Many Tricks' accounting app—that are both 32-bit. In addition, there are changes in Catalina relative to permissions that make it somewhat Vista like and slow down my interaction with the system. (My MacBook Air is my "production" Catalina Mac, and I have an older retina MacBook Pro that I use for Catalina betas.)
But Apple really wants people to update to Catalina, so they let you know about Catalina…constantly, it seems. In System Preferences > Software Update, you'll see this…
And while that's annoying, it's not nearly as annoying as the red "1" dot they stick on System Preferences, which will stare at you forever. I complained about this on Twitter, and as is often the case, some very bright people had solutions to the problem.
There are two things that I wanted to get rid of on my iMac: The notice about Catalina, and the infuriating red dot. At its simplest level, this appears to require just two Terminal commands, plus one more to restart the Dock (ignore the $; that's just the Terminal prompt):
$ sudo softwareupdate --ignore "macOS Catalina" $ defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 $ killall Dock
The first command gets rid of the notification about Catalina, and the second removes the red dot. The first command does what it should; after running it, Catalina no longer shows up as an available update.
Note: To undo this, so you see all updates—including Catalina—paste this command in Terminal: sudo softwareupdate --reset-ignored
The second command also appears to work, but it's a bit deceiving: The next time the OS checks for updates, it will see the Catalina update available—even though you've told Software Update to ignore it—and the dreaded red "1" will return.
The final command restarts the Dock, which forces the removal of the notification icon on System Preferences.
I decided to tackle this by creating a launchd agent—which is just the technical name for scheduled tasks in macOS' Unix core. I wrote about launchd a while ago, so I won't go through all the details of how it works again here.
The first step was to create a very simple shell script, which I saved as noreddot:
#!/bin/bash defaults write com.apple.systempreferences AttentionPrefBundleIDs 0 killall Dock
This is just the command that zeros the counter on the System Preferences' icon, saved in a script, plus a Dock restart to make sure the update notification vanishes. I then made it executable (chmod 755 noreddot). Next, I fired up LaunchControl, and created a very simple two-step launchd agent:
Step one tells the system to run my script, and step two tells it how often: Every day at 6am, noon, and 6pm. That should make the presence of any update notification no more than a six hour hassle…and if that bugs me, I can add more run times to my agent—it's not like this is a complex CPU-consuming task.
For those who don't want to use LaunchControl to make the agent, here's the source code—note that you'll need to edit the two lines marked with *** to make it work for you. (Remove the asterisks after editing, and if you haven't created a launchd script before, my full writeup explains things in more detail and has links to additional helpful sources.)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
I've only been running this for a day or so, but so far, it's worked like a charm—no updates listed within System Preferences, and no annoying red dot on System Preferences.